Wie gut virtualenv unter Windows und Linux verwenden?

Probleme bei der Installation?
Antworten
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hallo,

wie kann ich gut virtualenv gleichzeitig unter Linux und Windows verwenden, so dass ich das Skript nicht immer anpassen muss?

So wie ich es verstanden habe, ist der normale Weg, die virtualenv-Umgebung als Unterordner in dem Programm-Ordner einzurichten:

Code: Alles auswählen

programm.py
env/bin
env/include
env/....
usw.

im Skript selber kann ich dann als Shebang

Code: Alles auswählen

#! env/bin/python
schreiben und dann wird das Programm bei Linux automatisch mit der entsprechenden Umgebung gestartet.

Kann ich das jetzt auch irgendwie bei Windows machen? Für Windows muss ich natürlich wieder eine eigene virtualenv-Umgebung als Unterordner einrichten, aber wie kann ich es machen, dass der dann automatisch aus dem Unterordner startet? So wie ich verstanden habe, sucht dieses py.exe unter Windows automatisch nach einer Unix-Shebang und entscheidet dann, ob es mit Python 2 oder 3 gestartet werden soll. Aber wie kann ich das einrichten, dass der das beim Doppelklick mit virtualenv starten soll (ohne immer manuell den Python-Interpreter aufzurufen)?

Und kann ich das so einrichten, dass ich nicht immer die Shebang zwischen Linux und Windows verändern muss?

Danke!
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

Also die erste Zeile müsste schon mal so lauten:

Code: Alles auswählen

#!/usr/bin/env python
Mit Windows beschäftige ich mich nicht, aber ich glaube ab Python 3.2 funktioniert das auch dort.

Bei der Sache mit virtualenv verstehe ich nicht was du genau vor hast.
BlackJack

@peddy: Die Frage geht explizit um virtualenv, wenn Du nicht verstehst was damit gemacht wird/werden soll, kannst Du sie auch nicht wirklich beantworten.

Edit: Und die Zeile war im Original schon richtig, denn es sollte ja explizit das Python aus dem Environment das mit `virtualenv` angelegt wurde verwendet werden und nicht ein systemweit voreingestelltes.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ja, ab 3.2 ist `py.exe` beim Python-Installer dabei.
Das aendert aber nichts am Problem.

Die Shebang wird unter Windows ignoriert, also musst du sie auch nicht fuer beide kompatibel halten. Um dein Problem zu loesen musst du etwas aehnliches wie `py.exe` basteln: Einen Wrapper, der den Sourcecode untersucht, das entsprechende virtualenv aktiviert und dann darin das Programm startet.

Damit das dann per "Doppelklick" funktioniert, musst du unter Windows die Programmverknuepfung fuer Pythondateien anpassen und unter Linux die Shebang.

Zu guter Letzt solltest du deine Pythonprogramme dann nicht verteilen, denn es wird quasi unbenutzbar fuer ein anderes Setup.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

peddy hat geschrieben:Also die erste Zeile müsste schon mal so lauten:

Code: Alles auswählen

#!/usr/bin/env python
Mit Windows beschäftige ich mich nicht, aber ich glaube ab Python 3.2 funktioniert das auch dort.
Dann lädt der aber die systemweite Umgebung, was ich ja nicht will.
peddy hat geschrieben: Bei der Sache mit virtualenv verstehe ich nicht was du genau vor hast.
Mir geht es darum, dass es hier einen (experimentellen) Python-3-Port von paramiko gibt:
https://github.com/nischu7/paramiko/

Den möchte ich halt in einer virtualenv-Umgebung installieren und nicht in meinem ganzen System.

Die Installation klappt auch ganz gut mit virtualenv, das ist alles kein Problem. Ich will nur das gleiche Skript sowohl unter Linux (auf meinem Laptop), als auch unter Windows (auf meinem Desktop-PC) laufen lassen. Jetzt frage ich mich halt nur, wie ich das am besten schreibe, so dass beides funktioniert. Besonders Windows scheint mir da sehr unflexibel zu sein.

Aber ich glaube, bei Windows wird mir nachher eventuell nicht wirklich was anderes übrig bleiben als eine bat-Datei zu schreiben, die dann die Datei explizit mit dem Python aus der virtualenv-Umgebung aufruft, oder? Praktisch so etwas:

Code: Alles auswählen

env\Scripts\python.exe programm.py
Oder?

Was ist eigentlich allgemein die beste Vorgehensweise bei virtualenv? Jedes Programm bekommt ein eigenes virtualenv in das eigene Programmverzeichnis oder mit dem virtualenvwrapper alles zentral?
cofi hat geschrieben: Zu guter Letzt solltest du deine Pythonprogramme dann nicht verteilen, denn es wird quasi unbenutzbar fuer ein anderes Setup.
Hm, das ist eigentlich kein Problem. Oder kann man irgendwie ein kleines Setup-Programm erstellen, was eine virtualenv-Umgebung generiert (Hab das mal irgendwo gesehen). Das wäre sogar noch am praktischsten, weil der sich dann automatisch die Pakete herunterladen würde.
Antworten