Fehler bei der Installation von PIP / Phyton DSM 6

Status
Für weitere Antworten geschlossen.

Snowrisk

Benutzer
Mitglied seit
20. Sep 2013
Beiträge
34
Punkte für Reaktionen
3
Punkte
14
Hallo,

ich möchte PIP (für die Installation von Sabnzdb, welches Cheeta benötigt, was auf PIP aufsetzt)
auf meiner DS713+ DSM 6 installieren, aber erhalte folgende Fehlermeldung (auf der DSM5 ging es noch):

Rich (BBCode):
curl https://bootstrap.pypa.io/get-pip.py | python
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1487k  100 1487k    0     0  1605k      0 --:--:-- --:--:-- --:--:-- 2559k
Traceback (most recent call last):
  File "<stdin>", line 19154, in <module>
  File "<stdin>", line 194, in main
  File "<stdin>", line 82, in bootstrap
  File "/tmp/tmp8BoiNZ/pip.zip/pip/__init__.py", line 15, in <module>
  File "/tmp/tmp8BoiNZ/pip.zip/pip/vcs/subversion.py", line 9, in <module>
  File "/tmp/tmp8BoiNZ/pip.zip/pip/index.py", line 30, in <module>
  File "/tmp/tmp8BoiNZ/pip.zip/pip/wheel.py", line 32, in <module>
  File "/tmp/tmp8BoiNZ/pip.zip/pip/pep425tags.py", line 335, in <module>
  File "/tmp/tmp8BoiNZ/pip.zip/pip/pep425tags.py", line 307, in get_supported
  File "/tmp/tmp8BoiNZ/pip.zip/pip/pep425tags.py", line 163, in is_manylinux1_compatible
  File "/tmp/tmp8BoiNZ/pip.zip/pip/pep425tags.py", line 187, in have_compatible_glibc
ValueError: invalid literal for int() with base 10: '20-2014'

Hat da jemand einen Tip für mich? Komme nicht weiter....

Danke,
Jens
 
Zuletzt bearbeitet:

Technosoft2000

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Habe genau das selbe Problem und bin leider auch noch nicht dahinter gekommen warum dieses Auftritt bzw. wie man es zumindestens mit einem Workaround beheben kann, hoffe somit das jemand eine Idee hat.
Bin noch weiters am Googlen und forschen.

Danke
TS2k
 

Technosoft2000

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Habe nun einiges analysiert:

in der Datei get-pip.py habe ich nun folgenden "Hack" getätigt so dass die pip.zip nach dem Fehler nicht gelöscht wird - ab Zeile 195:
Rich (BBCode):
    finally:
	    print "done"
        # Clean up our temporary working directory
        #if tmpdir:
        #shutil.rmtree(tmpdir, ignore_errors=True)

Danach hab ich die pip.zip entpackt und mir die betroffene Datei pep425tags.py angesehen - wie in der Fehlermeldung ab Zeile 187 und habe folgende Logik extrahiert und in der python shell getestet:
Rich (BBCode):
>>> import ctypes
>>> process_namespace = ctypes.CDLL(None)
>>> gnu_get_libc_version = process_namespace.gnu_get_libc_version
>>> gnu_get_libc_version.restype = ctypes.c_char_p
>>> version_str = gnu_get_libc_version()
>>> print version_str
2.20-2014.11

führt man dann den folgenden Code aus
Rich (BBCode):
version = [int(piece) for piece in version_str.split(".")]
kommt es zum besagten Fehler
Rich (BBCode):
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '20-2014'

Der Code versucht nämlich die verschiedenen Versionsnummernanteile => Major.Minor zu extrahieren und da '.' der Token ist kommt als Minor Version der Wert '20-2014' heraus der dann nicht mehr konvertiert werden kann als Integer.

Interessant ist dass man nicht im Code folgendes verwendet um die glibc Version zu erkennen:
Rich (BBCode):
>>> import platform
>>> platform.libc_ver() 
('glibc', '2.2.5')

Vor allem interessant ist dass gleich eine andere Versionsnummer heraus kommt.

Ich versuche mich nun weiter darin einen Workaround zu bauen :D
 

Snowrisk

Benutzer
Mitglied seit
20. Sep 2013
Beiträge
34
Punkte für Reaktionen
3
Punkte
14
Das wäre cool. Mir fehlt die Ahnung dazu :-(
 

Technosoft2000

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Also folgende Schritte - man holt sich die gepatchten Dateien Anhang anzeigen PIP-Workaround.zip bzw. man kann die Dateien selbst patchen.

0. Mittels SSH bei der Syno anmelden und in '/tmp' wechseln

1. existierende https://bootstrap.pypa.io/get-pip.py holen mittels wget
Rich (BBCode):
wget https://bootstrap.pypa.io/get-pip.py
und anschliessend manuell patchen ab Zeile 195:

Rich (BBCode):
    finally:
	    print "done"
        # Clean up our temporary working directory
        #if tmpdir:
        #shutil.rmtree(tmpdir, ignore_errors=True)

ODER

aus dem Attachment Anhang anzeigen PIP-Workaround.zip die schon gepatchte get-pip.py in das '/tmp' Verzeichnis kopieren

2. get-pip.py ausführen mittels
Rich (BBCode):
python get-pip.py
und es folgt dann die Fehlermeldung wo die pip.zip liegt wie z.B:
Rich (BBCode):
File "/tmp/tmp8BoiNZ/pip.zip/pip/pep425tags.py", line 187, in have_compatible_glibc
Das Verzeichnis ist dann in diesem Beispiel /tmp/tmp8BoiNZ

3. In das Verzeichnis mit der pip.zip wechseln wie z.B.
Rich (BBCode):
cd /tmp/tmp8BoiNZ

4. Dann anschliessend die Zip Datei entpacken mittels
Rich (BBCode):
7z x pip.zip

5. Nach erfolgreicher Extraktion nun PIP patchen, entweder manuell die Datei pep425tags.py anpassen;
diese liegt nun im extrahierten Unterverzeichnis 'pip' z.B. '/tmp/tmp8BoiNZ/pip/pep425tags.py'
Rich (BBCode):
def have_compatible_glibc(major, minimum_minor):
    # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen
    # manpage says, "If filename is NULL, then the returned handle is for the
    # main program". This way we can let the linker do the work to figure out
    # which libc our process is actually using.
    process_namespace = ctypes.CDLL(None)
    try:
        gnu_get_libc_version = process_namespace.gnu_get_libc_version
    except AttributeError:
        # Symbol doesn't exist -> therefore, we are not linked to
        # glibc.
        return False

    # Call gnu_get_libc_version, which returns a string like "2.5".
    gnu_get_libc_version.restype = ctypes.c_char_p
    version_str = gnu_get_libc_version()
    # py2 / py3 compatibility:
    if not isinstance(version_str, str):
        version_str = version_str.decode("ascii")

    # Parse string and check against requested version.
    #version = [int(piece) for piece in version_str.split(".")]
    #if len(version) < 2:
    #    warnings.warn("Expected glibc version with 2 components major.minor,"
    #                  " got: %s" % version_str, RuntimeWarning)
    #    return False
    #return version[0] == major and version[1] >= minimum_minor
    return True

ODER

aus dem Attachment Anhang anzeigen PIP-Workaround.zip die schon gepatchte pep425tags.py verwenden und die existierende Datei damit überschreiben,
welche z.B. '/tmp/tmp8BoiNZ/pip/pep425tags.py' ist

6. PIP installieren - wir sind noch immer im selben Verzeichnis z.B. '/tmp/tmp8BoiNZ' (nicht im Unterverzeichnis 'pip')
Rich (BBCode):
python pip install --upgrade pip

7. PIP ist nun installiert, da aber zusätzlich ein Upgrade passiert ist muss die Datei 'pep425tags.py' im Zielverzeichnis /usr/local/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg/pip nochmals gepatcht werden wie im Schritt 5

8. PIP sollte nun erfolgreich installiert sein und dem Befehl
Rich (BBCode):
pip --version
sieht man dann die aktuelle Versionsnummer
Rich (BBCode):
pip 8.1.1 from /usr/local/lib/python2.7/site-packages/pip-8.1.1-py2.7.egg (python 2.7)

Gruß
TS2k
 

Snowrisk

Benutzer
Mitglied seit
20. Sep 2013
Beiträge
34
Punkte für Reaktionen
3
Punkte
14
@TS2k
Klasse! Danke für die Mühe, die Du Dir gemacht hast. Ich probiere es gleich aus.

Update:
In Schritt 7 war bei mir der Pfad anders:
pip 8.1.1 from /usr/lib/python2.7/site-packages (python 2.7)
Ansonsten hat's geklappt.

@DümmsterAnzunehmender Hab ich schon gemacht, hat nix genutzt.

VG
Jens
 
Zuletzt bearbeitet:

Trust

Benutzer
Mitglied seit
14. Mrz 2013
Beiträge
164
Punkte für Reaktionen
2
Punkte
18
Möchte grad unter DSM 6.0-7321 Update 3 über SSH und dem Befehl: "python -m ensurepip" das Python’s package management system installieren, bekomme aber die Fehlermeldung:

Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages
Collecting pip
Installing collected packages: pip
Exception:
Traceback (most recent call last):
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/basecommand.py", line 211, in main
status = self.run(options, args)
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/commands/install.py", line 311, in run
root=options.root_path,
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/req/req_set.py", line 646, in install
**kwargs
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/req/req_install.py", line 803, in install
self.move_wheel_files(self.source_dir, root=root)
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/req/req_install.py", line 998, in move_wheel_files
isolated=self.isolated,
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/wheel.py", line 339, in move_wheel_files
clobber(source, lib_dir, True)
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/wheel.py", line 310, in clobber
ensure_dir(destdir)
File "/tmp/tmpLiVF4v/pip-7.1.2-py2.py3-none-any.whl/pip/utils/__init__.py", line 71, in ensure_dir
os.makedirs(path)
File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/pip-7.1.2.dist-info'

Kann mir einer bitte helfen?
 

Technosoft2000

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Hi,

für die Erstinstallation am besten so vorgehen wie ich es im Post #7 in diesem Thread beschrieben habe.
Für upgrades in Zukunft dann folgenden Befehl verwenden:
Rich (BBCode):
pip install --upgrade pip
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat