2016-04-17 14 views
1

EDIT: Wenn Sie diese Frage zu einem Duplikat abstimmen, bitte nehmen Sie sich zumindest die Zeit, die Frage zu lesen, anstatt sie nur doppelt zu markieren, da sie einer anderen Frage ähnelt . Wenn Sie das getan hätten, würden Sie sofort erkennen, dass es kein Duplikat ist. Ich versuche nur, einen größeren Zusammenhang zu zeigen.virtualenv mit Python-Interpreter neuer als systemweiter Interpreter

Meine Distribution verwendet immer noch Python 2.6 als Python-Interpreter. Jetzt möchte ich ein Modul verwenden, das Python 2.7 benötigt. Ich habe Python 2.7 installiert, aber es würde andere Anwendungen beschädigen. Also habe ich eine virtuelle Umgebung mit Python 2.7 als Dolmetscher up:

virtualenv -p ~/pkg/bin/python2.7 venv 

Wenn ich die virtuelle Umgebung und führen Python die neue Interpreter aktivieren verwendet. Gut! Jetzt muss ich import Module, z.

Dies funktioniert global (d. H. In Python 2.6), aber nicht in meiner virtuellen Umgebung (d. H. In Python 2.7). Ich versuchte, die sys.path das gleiche für die virtuelle Umgebung zu setzen, aber das würde mir Fehler wie

ImportError: /usr/lib64/python2.6/site-packages/gtk-2.0/glib/_glib.so: undefined symbol: PyUnicodeUCS4_DecodeUTF8

, die etwas zu erwarten ist.

Eine Suche mit

pip search gtk 

würden keine Ergebnisse entweder nicht führen. Meine beste Vermutung ist, dass ich gtk aus der Quelle installieren und gegen Python 2.7 kompilieren muss. Dies zieht jedoch andere Abhängigkeiten in sich und wenn ich dieses Loch für ungefähr 7 oder 8 Schritte hinuntergehe, habe ich resigniert.

Gibt es eine einfachere Möglichkeit, dieses Problem zu lösen?

+2

Mögliches Duplikat von [versucht, ein Modul zu importieren: undefiniertes Symbol: PyUnicodeUCS4 \ _ DecodeUTF8] (http://stackoverflow.com/questions/16871799/trying-to-import-a-module-undefined-symbol-pyunicodeucs4-decodeutf8) – snakecharmerb

+1

@snakecharmerb nicht das. Und pfnuesel: Nein, Sie können Python 2.6 C-Erweiterungen in Python 2.7 überhaupt nicht verwenden. Stattdessen: erwägen Sie, Ihr Betriebssystem zu aktualisieren, so dass Sie 2.7 * oder noch besser ein anständiges Python 3 erhalten. –

+0

@AnttiHaapala Ja, das macht Sinn für mich. Upgraden, bei gutem Rat, ist leider nicht möglich, da dies unser Server-Betriebssystem ist, das auf mehreren tausend Servern läuft. – pfnuesel

Antwort

1

Nachdem Sie zuerst Ihre virtuelle Umgebung aktivieren, müssen Sie alle Pakete installieren Sie (zum Beispiel pip install pep8-naming) erfordern

Wenn Sie eine virtuelle Umgebung zu schaffen, ist es im Grunde als eine separate Installation von Python Standalone wirkt. Wenn Sie zuvor gtk (oder ein anderes Paket) in der globalen Python 2.6-Instanz installiert haben, ist dies in Ihrer virtuellen Python 2.7-Umgebung nicht verfügbar.

Stattdessen müssen Sie nach dem Wechsel in die Umgebung alle benötigten Pakete erneut installieren.

Zum Beispiel auf meinem Mac, ist das Standardsystem Python 2,7

$ which python 
/Library/Frameworks/Python.framework/Versions/2.7/bin/python 

Aber ich habe viele Pythons installiert:

$ python <tab><tab> 
python    python2.7-32  python3.2m-config python3.4m   pythonw2.7-32 
python-32   python2.7-config python3.3   python3.4m-config pythonw3 
python-config  python3   python3.3-32  pythontex   pythonw3-32 
python2   python3-32   python3.3-config pythonw   pythonw3.2 
python2-32   python3-config  python3.3m   pythonw-32   pythonw3.2-32 
python2-config  python3.2   python3.3m-config pythonw2   pythonw3.3 
python2.6   python3.2-32  python3.4   pythonw2-32  pythonw3.3-32 
python2.6-config python3.2-config python3.4-32  pythonw2.6   
python2.7   python3.2m   python3.4-config pythonw2.7   

Wenn ich ein neues virtualenv erstellen, können Sie sehen, es hat Nur die mindestens installierten Pakete

$ mkvirtualenv -p `which python3.4` test 
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4 
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4' 
New python executable in test/bin/python3.4 
Also creating executable in test/bin/python 
Installing setuptools, pip, wheel...pdone. 
$ pip list 
pip (7.1.2) 
setuptools (18.2) 
wheel (0.24.0) 
+0

Ich verstehe das alles. Meine Frage ist, wie man "gtk" für einen Interpreter installiert, der neuer ist als der, der auf dem System installiert ist. – pfnuesel

+0

@pfnuesel, du benutzt pip aus/in dem aktivierten virtualenv. – rkersh

+0

... was genau nicht funktioniert. Hast du meine Frage gelesen? – pfnuesel