Komme mit virtualenv nicht klar - suche Doku

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Hallo zusammen,

Um ein Python-Programm einfacher auf einen anderen Rechner beamen zu können, habe ich versucht, mich mich virtualenv anzufreunden und wollte es nach Anleitung auf virtualenv.org einfach mal probieren. Die Installation, die Aktivierung und Deaktivierung bekomme ich noch hin. Die Anleitung lässt aber eine Menge Fragen offen, die wohl jedem klar sind, der sich mit der Materie auskennt. Mir ist aber z.B. nicht klar, wie ich eine Auswahl der bereits auf dem System installierten Pakete in die virtualenv bekomme (wie das mit allen geht, ist mir klar). Ein Versuch, einfach die Pakete aus den (system)-site-packages dort hin zu kopieren hat aber nicht so ganz geklappt. Mit "pip list" werden mir dann auch einige der kopierten Pakete angezeigt, aber nicht alle. Muss ich da wirklich sämtliche benötigten Pakete wieder "von vorne" mit aktivierter virtualenv neu installieren (obwohl sie doch schon im System existieren) ? Wie bringe ich PyCharm dann bei, auch mit dieser virtualenv zu arbeiten (anderes Thema) ? Und dann bleibt noch die Frage offen, wie ich denn zum Schluss mit den setuptools ein "Installationspaket" für mein Programm schnüre.

Gerne würde ich mich da genauer einlesen. Mit den mir bekannten Anleitungen auf viertalenv.org und den dort verlinkten Seiten (welche teilweise nicht mehr existieren) komme ich da nicht so recht weiter. Kennt vielleicht jemand weitere Quellen, mit denen ich vielleicht etwas weiter komme ?

Grüße
m-o
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

der Sinn von "virtualenv" steht ja im 1. Satz der Einleitung der Doku:

"virtualenv is a tool to create isolated Python environments."

Heißt, dass du in der Tat in jedem virtualenv die benötigten Python-Module separat installierst.

Gruß, noisefloor
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Das ist der "Standardweg", das ist richtig !

Mit einigen Paketen geht das aber nicht immer mit "Standard", wie ich in den letzten Wochen lernen musste. Z.B. bei dem PySide-Paket bricht die Installation mit pip install so manches Mal mit einem Timeout oder auch mit anderen "Compilierungs"-Fehlern ab (ganz davon abgesehen, dass die "Installation" des Paketes ewig dauert...). Da war ich froh, als es dann irgendwann mal lief.

Bei den beiden PyOpenGL-Paketen, die mit pip install installiert werden, ist das Accelerate-Modul fehlerhaft. Da kommt man nur weiter, wenn man die Beta-Version herunterlädt und per python setup.py installiert. Bei den anderen, eher üblichen Paketen geht das natürlich alles mit "Standard".

Deshalb dachte ich halt, dass man solche Pakete vielleicht in die virtualenv kopieren könnte, weil pip meines Wissens auch nur in den site-packages nachschaut, wenn man pip list aufruft, oder liege ich da falsch ?

Naja, dann halt alles von vorne für das Arbeiten mit der virtualenv ...

Gerne würde ich bei dieser Gelegenheit auch lernen, inwieweit eine virtualenv bei der Installation eines Python-Programms auf einem Rechner mit einer anderen Platform (Mac OSX oder Windows) vorteilhaft ist und was man tun muss, um ein solches "Python-Programm-Paket" darauf ans Laufen zu bekommen.

EDIT:
Noch eine Frage: Wenn die virtualenv aktiviert ist, laufen dann auch die anderen Programme auf dem Rechner, die mit Python arbeiten, ebenfalls damit ?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mephisto-online hat geschrieben:Gerne würde ich bei dieser Gelegenheit auch lernen, inwieweit eine virtualenv bei der Installation eines Python-Programms auf einem Rechner mit einer anderen Platform (Mac OSX oder Windows) vorteilhaft ist und was man tun muss, um ein solches "Python-Programm-Paket" darauf ans Laufen zu bekommen.
Ich würde nicht sagen, dass das sonderlich vorteilhaft ist, da ja dein virtualenv neben den Shared Objects für Linux dann auch noch die für Mac OS X *und* Windows enthalten müsste. Das kannst du natürlich machen, aber der Aufwand das auf der jeweiligen Platform entsprechend zu paketieren ist vermutlich kleiner.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

OK ! Dann habe ich das glaube ich verstanden: virtualenv ist also eher dafür gedacht, dass ich auch auf einem Rechner mit Python arbeiten kann, auf dem ich keine Admin-Rechte habe.

Grüße
m-o
BlackJack

@mephisto-online: Dafür bräuchte man kein virtualenv, man Python auch lokal als Benutzer übersetzen und installieren und für diese Installation dann Packages und Module installieren. Zitat aus noisefloor's erster Antwort in diesem Thema: "virtualenv is a tool to create isolated Python environments."

Das die voneinander isoliert sind, bedeutet zum Beispiel, dass man eine Bibliothek für verschiedene Projekte in verschiedenen Versionen in diese virtuelle Umgebung installieren kann, was ohne virtualenv nicht möglich wäre. Oder man kann das selbe Projekt mit unterschiedlichen Kombinationen von Versionen von Bibliotheken testen.
mephisto-online
User
Beiträge: 167
Registriert: Sonntag 29. September 2013, 17:05

Die Bezeichnung "isolierte Umgebung" hatte ich wohl falsch verstanden, bzw hatte keine Idee darauf, wo man denn so etwas brauchen könnte. Klar, wenn man mit "speziellen" Paketen testen oder arbeiten will oder an mehreren Projekten gleichzeitig , ist es natürlich gut, dass man die Möglichkeit hat, das mit der virtualenv zu realisieren.

Danke für den Hinweis !
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

mephisto-online hat geschrieben: Um ein Python-Programm einfacher auf einen anderen Rechner beamen zu können, habe ich versucht, mich mich virtualenv anzufreunden und wollte es nach Anleitung auf virtualenv.org einfach mal probieren. Die Installation, die Aktivierung und Deaktivierung bekomme ich noch hin. Die Anleitung lässt aber eine Menge Fragen offen, die wohl jedem klar sind, der sich mit der Materie auskennt. Mir ist aber z.B. nicht klar, wie ich eine Auswahl der bereits auf dem System installierten Pakete in die virtualenv bekomme (wie das mit allen geht, ist mir klar). Ein Versuch, einfach die Pakete aus den (system)-site-packages dort hin zu kopieren hat aber nicht so ganz geklappt. Mit "pip list" werden mir dann auch einige der kopierten Pakete angezeigt, aber nicht alle. Muss ich da wirklich sämtliche benötigten Pakete wieder "von vorne" mit aktivierter virtualenv neu installieren (obwohl sie doch schon im System existieren) ? Wie bringe ich PyCharm dann bei, auch mit dieser virtualenv zu arbeiten (anderes Thema) ? Und dann bleibt noch die Frage offen, wie ich denn zum Schluss mit den setuptools ein "Installationspaket" für mein Programm schnüre.
Wenn Du mit Pycharm arbeitest kannst Du doch die virtual environment (venv) über die Oberfläche anlegen. Dabei wird abgefragt, ob du die vorhandenen site-packages kopieren willst. In Pycharm wird in der Konfigurationseinstellung angezeigt welche venv dein Projekt gerade nutzt. Projekt offen, oben rechts ist ein kleines Pulldown mit dem Namen des Projektes. Aufklappen und "Edit Configuration" anzeigen lassen. Die Auswahl geht über das Menü "File/Default Settings/Python Interpreter". Dort kannst Du auch neue venvs anlegen.

Die Frage, wie man ein global installiertes Package nachträglich in die venv kopiert, würde mich allerdings auch interessieren (hier: mysql-connector ist auf der Maschine installiert, ich bräuchte es aber in einer venv). Über Pycharm aus dem Internet installieren, funktioniert nicht.
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Die Frage nach der Übernahme auf ein anderes System (Bspw. Entwicklung Mac OS X und übertragen auf Windows, warum auch immer) würde ich so beantworten.
Erzeuge auf der Entwicklermaschine eine Datei requirements.txt (pip freeze > requirements.txt) und arbeite diese dann auf der Zielmaschine ab. Somit solltest Du eine gleiche Virtual Environment Umgebung erzeugen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

wagneru hat geschrieben:Die Frage, wie man ein global installiertes Package nachträglich in die venv kopiert, würde mich allerdings auch interessieren (hier: mysql-connector ist auf der Maschine installiert, ich bräuchte es aber in einer venv). Über Pycharm aus dem Internet installieren, funktioniert nicht.
Ich vermute mal dass du das venv wie ein ganz normales Virtualenv nutzen kannst, ergo dieses aktivieren und dann mittels `pip` Pakete darin installieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

wagneru hat geschrieben:Die Frage nach der Übernahme auf ein anderes System (Bspw. Entwicklung Mac OS X und übertragen auf Windows, warum auch immer) würde ich so beantworten.
Erzeuge auf der Entwicklermaschine eine Datei requirements.txt (pip freeze > requirements.txt) und arbeite diese dann auf der Zielmaschine ab. Somit solltest Du eine gleiche Virtual Environment Umgebung erzeugen.
Das Probem war, das ich zuerst versucht hatte mit pip Version 1.5.x das Paket zu installieren. Erst mit pip 1.4 funktionierte es. Wusste nicht das die Packages für die pip Versionen passend sein müssen.
Antworten