2014-03-31 5 views
5

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

3

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

    deaktivieren
  • wird nicht helfen, wenn Sie Ihr Paket mit dem Standard distutils setup.py verteilen mögen.

5

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