Ich möchte in der Lage sein, einen virtualenv zu teilen, der eigenständig ist, d. H. Sicherstellen, dass alle installierten Skripte direkt ausgeführt werden können, ohne irgendetwas setzen zu müssen. Zum Beispiel Ich installiere ein Skript in meinem virtualenv, das MySQL-Python verwendet. Leider importiert das Importieren von MySQLdb nach einer freigegebenen Bibliothek (libmysqlclient.so), die anders als die Standardverzeichnisse auf meinem System verschoben wurde. Gibt es eine Möglichkeit zu garantieren, dass mein virtualenv die Bibliothek jedes Mal findet, wenn jemand sie benutzt?virtualenv, das verschobene Libraries finden kann (wie mysqlclient lib für MySQLdb)
Antwort
Dies ist vielleicht nicht die beste Lösung, aber Sie können das virtuelle Skript virtualenv hacken, um eine Umgebungsvariable zu setzen (dies ist ein Skript, das wir sowieso verwenden müssen). Im Installationsskript des virtualenv, fügte ich hinzu:
echo 'export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH' >> /path/to/virtualenv/activate
Nun meine virtualenv jedes Mal, wenn jemand nutzt, sondern schließt auch die LD_LIBRARY_PATH die MySQL-Bibliotheken zu finden.
Nachteile kann ich sehen:
nicht schön ist mit virtualenv Arbeitet
deaktivierenwird nicht helfen, wenn Sie Ihr Paket mit dem Standard distutils setup.py verteilen mögen.
Ich weiß, diese Frage ist ein bisschen alt, aber ich würde gerne meine Lösung für den Mangel teilen sie über Google zu finden:
In der deactivate()
Funktion, fügen Sie die folgenden Zeilen:
if ! [ -z ${_OLD_LD_LIBRARY_PATH+x} ] ; then
LD_LIBRARY_PATH="$_OLD_LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
unset _OLD_LD_LIBRARY_PATH
fi
Bitte beachte, dass ich einen negierte -z
Ausdruck bin mit - der vorhandenen Reset-Skripte für PATH
und PYTHONHOME
Verwendung -n
, die fälschlicherweise als falsch ausgewertet, wenn _OLD_LD_LIBRARY_PATH
auf eine emp gesetzt Zeichenfolge.
Dann unterhalb der deactivate()
Funktion, fügen Sie den folgenden Abschnitt:
_OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
LD_LIBRARY_PATH="$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH