Zusammenfassung
Es gibt drei allgemeine Kategorien von Modulen, mit denen Sie es zu tun haben:
- Diese unterstützenden Programme sind für alle Benutzer mit dem Betriebssystempaketsystem installiert. (Dies kann sogar Tools und Bibliotheken einschließen, die von Personen verwendet werden, die in Python programmieren. Siehe unten.) Für diese verwenden Sie die Betriebssystempakete, wo Sie können, und
pip
installieren sie bei Bedarf in den Systemverzeichnissen.
- Diese unterstützenden Programme werden von einem bestimmten Benutzer nur für den eigenen Gebrauch und für bestimmte Aspekte ihrer "täglichen" Verwendung von Python als Skriptsprache installiert. Für diese verwendet sie
pip --user
vielleicht Pyenv oder Pythonz und ähnliche Werkzeuge und Taktiken.
- Diejenigen, die die Entwicklung und Verwendung einer bestimmten Anwendung unterstützen. Für diese verwenden Sie
virtualenv
(oder ein ähnliches Tool).
Jede Ebene hier kann auch Unterstützung von einer vorherigen Ebene erhalten. Beispielsweise kann sich unser Benutzer in (2) auf einen Python-Interpreter verlassen, der über Betriebssystempakete installiert wird.
Darauf gehen wir etwas genauer ein:
Systemprogramme und Pakete
In Python geschriebene Programme, die Sie "nur ausführen" möchten, sind einfach: Verwenden Sie einfach die OS-Installationstools und lassen Sie sie alles einspielen, was sie benötigen. Dies unterscheidet sich nicht von einem Nicht-Python-Programm. Dies führt wahrscheinlich zu Python-Tools / -Bibliotheken (wie dem Python-Interpreter selbst!), Auf die sich Benutzer auf Ihrem Computer möglicherweise verlassen. Dies ist kein Problem, solange sie die Abhängigkeiten verstehen und im Idealfall alternative Methoden kennen, um mit Hosts umzugehen, die diese Abhängigkeiten nicht bereitstellen.
Ein allgemeines und einfaches Beispiel für eine solche Abhängigkeit sind einige meiner persönlichen Skripte ~/.local/bin/
, mit denen ich beginne #!/usr/bin/env python
. Diese funktionieren unter RH / CentOS 7 und den meisten (aber nicht allen) Ubuntu-Installationen einwandfrei (sofern sie unter Python 2 ausgeführt werden). Sie werden nicht unter einer grundlegenden Debian-Installation oder unter Windows installiert. So sehr ich es nicht mag, dass mein persönliches Umfeld stark von Betriebssystempaketen abhängt (ich arbeite mit einer Reihe verschiedener Betriebssysteme), finde ich so etwas ziemlich akzeptabel. Mein Backup-Plan für die seltenen Hosts, die kein Python-System haben und keines bekommen können, besteht darin, mit einem Benutzersystem zu arbeiten, wie unten beschrieben.
Personen, die einen System-Python-Interpreter verwenden, sind normalerweise auch vom System abhängig pip3
. Hier ziehe ich normalerweise die Grenze zu meinen Systemabhängigkeiten. alles von virtualenv
vorn kümmere ich mich um mich. (Zum Beispiel ist mein Standard - activate Skript beruht auf , was auch immer pip3
oder pip
ist auf dem Weg, sondern lädt seine eigene Kopie virtualenv
der virtuellen Umgebung Bootstrap es zu schaffen.
Allerdings gibt es wahrscheinlich Umstände, unter denen es durchaus sinnvoll ist, eine Entwicklungsumgebung besser verfügbar zu machen. Möglicherweise verfügen Sie über Python-Schnittstellen in komplexen Paketen (z. B. einem DBMS), in denen Sie die Systemversion davon verwenden möchten, und Sie sind der Meinung, dass es am besten ist, wenn Sie das System den speziellen Python-Bibliothekscode auswählen lassen, mit dem Sie kommunizieren. Oder Sie stellen viele Hosts mit einer grundlegenden Entwicklungsumgebung für eine Python-Klasse bereit und finden es am einfachsten, sie mit Standardsystempaketen zu automatisieren.
Benutzer "Tages" -Programme und -Pakete
Benutzer verfügen möglicherweise über Python-Bibliotheken oder -Programme, die sich nicht gut in eine virtuelle Umgebung einfügen lassen, da sie beim Erstellen virtueller Umgebungen (z. B. virtualenvwrapper ) helfen sollen, oder sie sind Dinge, die Sie normalerweise auch während der Ausführung über die Befehlszeile verwenden Nicht-Python-Arbeit erledigen. Selbst wenn sie die Möglichkeit haben, Systemversionen davon zu installieren, fühlen sie sich möglicherweise wohler, wenn sie ihre eigenen installieren (z. B. weil sie die neueste Version des Tools und seine Abhängigkeiten verwenden möchten).
Im Allgemeinen pip --user
wird dies verwendet, obwohl bestimmte Abhängigkeiten, wie der Python-Interpreter selbst, etwas mehr erfordern. pyenv und pythonz sind nützlich, um persönliche Interpreter ~/.local/bin
zu erstellen (unabhängig davon, ob sie als Standardinterpreter oder auf andere Weise installiert sind ), und natürlich kann man immer "von Hand" aus dem Quellcode erstellen, wenn die Entwicklerbibliotheken verfügbar sind.
Ich versuche, das Nötigste, was hier installiert ist, beizubehalten: virtualenvwrapper (weil ich es ständig benutze) und vielleicht die neueste Version von pip. Ich versuche, Abhängigkeiten außerhalb der Standardbibliothek oder von Python 3 zu vermeiden, damit persönliche Skripte, die ich schreibe, auf vielen Hosts verwendet werden können. (Allerdings werden wir sehen, wie lange ich das durchhalten kann, wenn ich mehr und mehr dieser persönlichen Skripte nach Python verschiebe.)
Separate Anwendungsentwicklungs- und Laufzeitumgebungen
Dies ist die übliche virtuelle Sache. Für die Entwicklung sollten Sie fast immer eine virtuelle Umgebung verwenden, um sicherzustellen, dass Sie keine Systemabhängigkeiten verwenden, oder häufig mehrere, um verschiedene Python-Versionen zu testen.
Diese virtuellen Umgebungen eignen sich auch für Anwendungen mit vielen Abhängigkeiten, bei denen Sie eine Verschmutzung Ihrer Benutzerumgebung vermeiden möchten. Zum Beispiel habe ich normalerweise ein virtuelles Env eingerichtet, um Jupyter- Notebooks und ähnliches zu betreiben .