Was ist der richtige Weg, um Pip, virtualenv zu installieren und für Python zu verteilen?

Kurze Frage

  • Was ist der richtige Weg, um pip , virtualenv zu installieren und zu distribute ?

Hintergrund

In meiner Antwort auf SO Frage 4314376 empfehle ich ez_setup damit du dann pip und virtualenv wie folgt installieren virtualenv :

 curl -O http://peak.telecommunity.com/dist/ez_setup.py sudo python ez_setup.py sudo easy_install pip sudo pip install virtualenv 

Ich habe diese Anleitung ursprünglich aus Jesse Nollers Blogpost gezogen. So willst du Python auf dem Mac benutzen? . Ich mag die Idee, ein sauberes globales Site-Pakete-Verzeichnis zu halten, also die nur anderen Pakete, die ich dort installiere, sind virtualenvwrapper und distribute . (Ich habe vor kurzem hinzugefügt distribute um meine Toolbox wegen dieser Python Public Service Ankündigung zu distribute diese beiden Pakete zu installieren, habe ich verwendet:

 sudo pip install virtualenvwrapper curl -O http://python-distribute.org/distribute_setup.py sudo python distribute_setup.py 

Nicht mehr setuptools und easy_install

Um wirklich zu folgen, dass Python Public Service Ankündigung , auf eine neue Python-Installation, würde ich folgendes tun:

 curl -O http://python-distribute.org/distribute_setup.py sudo python distribute_setup.py sudo easy_install pip sudo pip install virtualenv sudo pip install virtualenvwrapper 

Glyphs Vorwurf

In einem Kommentar zu meiner Antwort auf SO Frage 4314376 , sagte SO Benutzer Glyph :

NEIN. sudo python setup.py install was auch immer. Schreiben Sie ein ~ / .pydistutils.cfg, das Ihre Pip-Installation in ~ / .local oder etwas setzt. Besonders Dateien namens ez_setup.py neigen dazu, neuere Versionen von Sachen wie setuptools und easy_install zu saugen, die möglicherweise andere Dinge auf Ihrem Betriebssystem brechen können.

Zurück zur kurzen Frage

Also Glyphs Antwort führt mich zu meiner ursprünglichen Frage:

  • Was ist der richtige Weg, um pip , virtualenv zu installieren und zu distribute ?

15 Solutions collect form web for “Was ist der richtige Weg, um Pip, virtualenv zu installieren und für Python zu verteilen?”

Sie können dies tun, ohne etwas in Python selbst zu installieren.

Sie brauchen kein Sudo oder irgendwelche Privilegien.

Sie müssen keine Dateien bearbeiten.

Installiere virtualenv in eine virtuelle bootstrap-Umgebung. Verwenden Sie diese virtuelle Umgebung, um mehr zu erstellen. Da virtualenv mit pip und verteilen, bekommt man alles von einer install

  1. Download virtualenv:
  2. Entpacken Sie den Quell-Tarball
  3. Verwenden Sie das ausgepackte Tarball, um eine saubere virtuelle Umgebung zu erstellen. Diese virtuelle Umgebung wird verwendet, um andere zu booten. Alle Ihre virtuellen Umgebungen werden automatisch Pip und verteilen.
  4. Mit pip, install virtualenv in die Bootstrap-Umgebung.
  5. Verwenden Sie diese Bootstrap-Umgebung, um mehr zu erstellen!

Hier ist ein Beispiel in bash:

 # Select current version of virtualenv: VERSION=12.0.7 # Name your first "bootstrap" environment: INITIAL_ENV=bootstrap # Set to whatever python interpreter you want for your first environment: PYTHON=$(which python) URL_BASE=https://pypi.python.org/packages/source/v/virtualenv # --- Real work starts here --- curl -O $URL_BASE/virtualenv-$VERSION.tar.gz tar xzf virtualenv-$VERSION.tar.gz # Create the first "bootstrap" environment. $PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV # Don't need this anymore. rm -rf virtualenv-$VERSION # Install virtualenv into the environment. $INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz 

Jetzt können Sie Ihre "bootstrap" -Umgebung verwenden, um mehr zu erstellen:

 # Create a second environment from the first: $INITIAL_ENV/bin/virtualenv py-env1 # Create more: $INITIAL_ENV/bin/virtualenv py-env2 

Verrückt werden!

Hinweis

Dies geht davon aus, dass Sie keine wirklich alte Version von virtualenv verwenden. Alte Versionen benötigten die Flaggen – nicht --no-site-packges (und abhängig von der Version von Python, – --distribute ). Jetzt kannst du deine Bootstrap-Umgebung mit nur python virtualenv.py path-to-bootstrap oder python3 virtualenv.py path-to-bootstrap .

Ich denke, Glyph bedeutet so etwas wie dies:

  1. Erstellen Sie ein Verzeichnis ~/.local , falls es noch nicht vorhanden ist.
  2. In Ihrem ~/.bashrc , stellen ~/.bashrc sicher, dass ~/.local/bin auf PATH und dass ~/.local auf PYTHONPATH .
  3. Erstellen Sie eine Datei ~/.pydistutils.cfg die enthält

     [install] prefix=~/.local 

    Es ist eine Standard-ConfigParser-Format-Datei.

  4. Download distribute_setup.py und laufe python distribute_setup.py (kein sudo ). Wenn es sich um ein nicht existierendes site-packages Verzeichnis beschwert, erstellen Sie es manuell:

    Mkdir -p ~ / .local / lib / python2.7 / site-packages /

  5. Führen Sie which easy_install , um zu überprüfen, ob es von ~/.local/bin

  6. Run pip install virtualenv
  7. Führen Sie pip install virtualenvwrapper
  8. Erstellen Sie eine virtuelle env mit Ordner, sagen ~/.virtualenvs
  9. In ~/.bashrc hinzufügen

     export WORKON_HOME source ~/.local/bin/virtualenvwrapper.sh 

Das ist es, kein Gebrauch von sudo überhaupt und Ihre Pythonumgebung ist in ~/.local , völlig getrennt von der OS Python. Haftungsausschluss: Nicht sicher, wie kompatibel virtualenvwrapper in diesem Szenario ist – ich konnte es nicht auf meinem System testen 🙂

Wenn du den in den folgenden Tutorials beratenen Schritten folgst , kannst du den gewünschten Effekt ohne die etwas komplizierten "manuellen" Schritte in den Antworten von Walker und Vinay bekommen. Wenn du auf Ubuntu bist:

 sudo apt-get install python-pip python-dev 

Das Äquivalent wird in OS X durch die Verwendung von Homebrew zur Installation von Python (mehr Details hier ) erreicht.

 brew install python 

Mit pip installiert, können Sie es verwenden, um die restlichen Pakete zu bekommen (Sie können sudo in OS X weglassen, wie Sie Ihre lokale Python-Installation verwenden).

 sudo pip install virtualenvwrapper 

(Das sind die einzigen Pakete, die du weltweit installiert hast und ich bezweifle, dass es mit irgendwelchen System-Levels aus dem Betriebssystem zusammenstoßen wird. Wenn du super-sicher sein möchtest, kannst du die distro's Versionen sudo apt-get install virtualenvwrapper )

Hinweis: In Ubuntu 14.04 pip3 install virtualenv virtualenvwrapper ich einige Fehler mit Pip-Installation , also verwende ich pip3 install virtualenv virtualenvwrapper und füge VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 zu meiner .bashrc/.zshrc Datei hinzu.

Sie .bashrc dann an Ihre .bashrc Datei

 export WORKON_HOME source /usr/local/bin/virtualenvwrapper.sh 

Und entsorge es

 . ~/.bashrc 

Das ist im Grunde genommen. Jetzt ist die einzige Entscheidung, ob Sie ein virtualenv erstellen möchten, um System-Level-Pakete einzuschließen

 mkvirtualenv --system-site-packages foo 

Wo Ihre vorhandenen Systempakete nicht neu installiert werden müssen, sind sie mit den Versionen des Systeminterpreters verknüpft. Hinweis: Sie können immer noch neue Pakete installieren und bestehende Inklusive-System-Pakete ohne Sudo aktualisieren – ich habe es getestet und es funktioniert ohne Unterbrechung des System-Interpreters.

 kermit@hocus-pocus:~$ sudo apt-get install python-pandas kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s (s)kermit@hocus-pocus:~$ pip install --upgrade pandas (s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)" 0.10.1 (s)kermit@hocus-pocus:~$ deactivate kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)" 0.8.0 

Die Alternative, wenn man eine völlig getrennte Umgebung wünscht, ist

 mkvirtualenv --no-site-packages bar 

Oder gegeben, dass dies die Standard-Option ist, einfach

 mkvirtualenv bar 

Das Ergebnis ist, dass Sie eine neue virtualenv haben, wo Sie frei und plötzlich installieren können Ihre Lieblings-Pakete

 pip install flask 

Python 3.4 weiter

Python 3.3 fügt das Venv-Modul hinzu , und Python 3.4 fügt das Safepip-Modul hinzu . Dies macht bootstrapping Pip so einfach wie:

Python -m sicherheitspfeil

Vielleicht ist ein Anruf zu venv , um dies in einer virtuellen Umgebung venv .

Garantiertes Pip ist in PEP 453 beschrieben .

Auf Ubuntu:

sudo apt-get install python-virtualenv

Das Paket python-pip ist eine Abhängigkeit, also wird es auch installiert.

Update: Ab Juli 2013 wird dieses Projekt nicht mehr beibehalten. Der Autor schlägt vor, pyenv zu verwenden . (Pyenv hat keine integrierte Unterstützung für virtualenv, aber spielt nett mit ihm.)

Pythonbrew ist ein Versionsmanager für Python und kommt mit Unterstützung für virtualenv.

Nach der Installation von Pythonbrew und einer Python-Version mit venvs ist wirklich einfach:

 # Initializes the virtualenv pythonbrew venv init # Create a virtual/sandboxed environment pythonbrew venv create mycoolbundle # Use it pythonbrew venv use mycoolbundle 

Ich habe dieses Verfahren für uns bei der Arbeit verwendet.

 cd ~ curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz cd pip-1.3.1 python setup.py install --user cd ~ rm -rf pip-1.3.1 $HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper # Might want these three in your .bashrc export PATH=$PATH:$HOME/.local/bin export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute" source $HOME/.local/bin/virtualenvwrapper.sh mkvirtualenv mypy workon mypy pip install --upgrade distribute pip install pudb # Or whatever other nice package you might want. 

Wichtige Punkte für die Sicherheit:

  1. Curl tut ssl validierung Wget nicht
  2. Ab Pip 1.3.1, Pip auch ssl Validierung.
  3. Weniger Benutzer können den Pypi Tarball als ein Github Tarball hochladen.

Es gibt kein Problem zu tun sudo python setup.py installieren, wenn Sie sicher sind, was es ist, was Sie tun möchten.

Der Unterschied besteht darin, dass es das Site-Pakete-Verzeichnis Ihres Betriebssystems als Ziel für .py-Dateien verwendet, die kopiert werden sollen.

Also, wenn du willst, dass pip zugänglich ist os breit, das ist wohl der Weg zu gehen. Ich sage nicht, dass andere Weg schlecht sind, aber das ist wohl fair genug.

Installiere ActivePython . Es enthält Pip, virtualenv und Distribute.

Ich kam vor kurzem auf das gleiche Problem. Ich werde immer mehr Teil der "immer verwenden eine virtualenv" Denkweise, so dass mein Problem war, virtualenv mit Pip zu installieren, ohne Installation zu verteilen, um meine globale oder Benutzer-Website-Pakete Verzeichnis. Um dies zu tun, habe ich manuell heruntergeladen, pip und virtualenv, und für jeden lief ich "python setup.py install –prefix ~ / .local / python-private" (mit einer temporären Einstellung von PYTHONPATH = ~ / .local / Python-privat), so dass Setup-Skripte in der Lage waren zu verteilen). Ich habe das virtualenv Skript in ein anderes Verzeichnis verschoben, das ich auf meinem PATH habe und es so bearbeitet habe, dass die verteilten und virtualenv Module auf sys.path gefunden werden können. Tada: Ich habe nichts an / usr installiert, / usr / local oder meine User-Site-Pakete dir, aber ich kann überall virtualenv laufen, und in diesem virtualenv bekomme ich pip.

  • Sie können dies tun, ohne etwas in Python selbst zu installieren.

  • Sie brauchen kein Sudo oder irgendwelche Privilegien.

  • Sie müssen nicht die neueste Version einer virtualenv tar Datei finden

  • Sie müssen nicht Versionsinformationen in einem Bash-Skript bearbeiten, um die Dinge auf dem Laufenden zu halten.

  • Du brauchst keine curl / wget oder tar installiert, noch pip oder easy_install

Speichern Sie Folgendes in /tmp/initvenv.py :

 from __future__ import print_function import os, sys, shutil, tempfile, subprocess, tarfile, hashlib try: from urllib2 import urlopen except ImportError: from urllib.request import urlopen tmp_dir = tempfile.mkdtemp(prefix='initvenv_') try: # read the latest version from PyPI f = urlopen("https://pypi.python.org/pypi/virtualenv/") # retrieve the .tar.gz file for line in f.read().splitlines(): if isinstance(line, bytes): line = line.decode('utf-8') if 'tar.gz<' not in line: continue for url in line.split('"'): if url.startswith('http'): url, md5 = url.split('#') assert md5.startswith('md5=') md5 = md5[4:] break else: continue break else: print('tar.gz not found') sys.exit(1) file_name = url.rsplit('/', 1)[1] print(file_name) # url = "https://pypi.python.org/packages/source/v/virtualenv/" + file_name os.chdir(tmp_dir) with open(file_name, 'wb') as fp: data = urlopen(url).read() data_md5 = hashlib.md5(data).hexdigest() if md5 != data_md5: print('md5 not correct') print(md5) print(data_md5) sys.exit(1) fp.write(data) tar = tarfile.open(file_name) tar.extractall() tar.close() os.chdir(file_name.replace('.tar.gz', '')) print(subprocess.check_output([sys.executable, 'virtualenv.py'] + [sys.argv[1]]).decode('utf-8'), end='') if len(sys.argv) > 2: print(subprocess.check_output([ os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] + sys.argv[2:]).decode('utf-8'), end='') except: raise finally: shutil.rmtree(tmp_dir) # always clean up 

Und benutze es als

 python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages] 

setuptools (wenn du die Kompatibilitätsschicht für setuptools wirklich setuptools )

 python /tmp/initvenv.py venv distribute 

Bitte beachten Sie, dass bei älteren Python-Versionen dies Ihnen InsecurePlatformWarning s¹ geben könnte.

Sobald Sie Ihr virtualenv (name zB venv ) haben, können Sie ein anderes virtualenv mit dem virtualenv gerade installiert virtualenv :

 venv/bin/virtualenv venv2 

Virtualenvwrapper

Ich empfehle auch einen Blick auf virtualenvwrapper , nach einer einmaligen Einrichtung:

 % /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper 

Und Aktivierung (kann von Ihrem Anmeldeskript durchgeführt werden):

 % source venv/bin/virtualenvwrapper.sh 

Sie können Dinge wie:

 % mktmpenv New python executable in tmp-17bdc3054a46b2b/bin/python Installing setuptools, pip, wheel...done. This is a temporary environment. It will be deleted when you run 'deactivate'. (tmp-17bdc3054a46b2b)% 

¹ Ich habe keinen Weg gefunden, die Warnung zu unterdrücken. Es könnte in pip und / oder request gelöst werden, aber die Entwickler zeigen aufeinander als Ursache. Ich habe die, oft nicht-realistische Empfehlung, die Python-Version zu aktualisieren, die ich mit der neuesten Version verwendete. Ich bin mir sicher, dass dies z. B. meine Linux Mint 17 installieren würde. Glücklicherweise pip Caches Pakete, so dass die Warnung nur einmal pro Paket installiert wird.

Ich habe verschiedene Probleme (siehe unten) installiert Upgrade-SSL-Module, auch innerhalb eines virtualenv, auf der Oberseite der älteren OS-Bereitstellung Python-Versionen, so dass ich jetzt verwenden pyenv .

Pyenv macht es sehr einfach, eine neue Python-Version zu installieren und unterstützt virtualenvs. Erste Schritte sind viel einfacher als die Rezepte für virtualenv in anderen Antworten aufgeführt:

  • Auf Mac, brew install pyenv und unter Linux, verwenden Sie pyenv-installer
  • Hier bekommst du eingebaute virtualenv Unterstützung sowie Python Versionsumschaltung (falls erforderlich)
  • Funktioniert gut mit Python 2 oder 3, kann viele Versionen sofort installiert haben

Das funktioniert sehr gut, um die "neue Python" Version und virtualenv aus dem System Python zu isolieren. Weil man ganz einfach eine neuere Python (Post 2.7.9) verwenden kann, sind die SSL-Module bereits aufgerüstet und natürlich wie jedes moderne virtualenv-Setup, das du von den Python-Modulen des Systems isoliert hast.

Ein paar nette Tutorials:

  • Mit pyenv und virtualenv – bei der Auswahl einer Python-Version ist es einfacher, pyenv global 3.6.1 (global to current user) oder pyenv local 2.7.13 (lokal zum aktuellen Verzeichnis) zu verwenden.
  • Pyenv Grundlagen und Gebrauch mit virtualenv

Das pyenv-virtualenv Plugin ist nun in pyenv commands | grep virtualenv pyenv commands | grep virtualenv zu überprüfen. Ich würde das pyenv-virtualenvwrapper-Plugin nicht benutzen, um zu beginnen – sehe, wie du mit pyenv-virtualenv kommst, der mehr in pyenv integriert ist, da dies die meisten von dem, was virtualenvwrapper tut,

pyenv ist modelliert auf rbenv (ein gutes Werkzeug für Ruby Version Switching) und seine einzige Abhängigkeit ist bash.

  • Pyenv ist nicht mit dem sehr ähnlich benannten pyvenv – das ist ein virtualenv gleichwertiges, das Teil der letzten Python 3 Versionen ist und nicht mit Python Versionsumschaltung verarbeitet

Vorbehalte

Zwei Warnungen über pyenv:

  1. Es funktioniert nur von einem bash oder einer ähnlichen Shell – oder genauer gesagt, das pyenv-virtualenv Plugin nicht wie dash , das /bin/sh auf Ubuntu oder Debian ist.
  2. Es muss von einer interaktiven Login-Shell (zB bash --login mit einem Terminal) ausgeführt werden, was bei Automatisierungswerkzeugen wie Ansible nicht immer leicht zu erreichen ist.

Daher ist pyenv am besten für interaktive Nutzung und weniger gut für Scripting-Server.

SSL-Modul Probleme

Ein Grund für die Verwendung von pyenv ist, dass es oft Probleme mit dem Upgrade von Python SSL-Modulen bei der Verwendung von älteren System-bereitgestellten Python-Versionen gibt:

  • Ubuntu 14.04 enthält Python 2.7.6, die erhebliche Anstrengungen erfordert , um es auf die richtigen SSL-Module zu aktualisieren, damit es SNI (Server-Namensangabe) als Client verarbeitet. (Ich schrieb einige Ansible Scripts für das, was sehr schmerzhaft war und noch in einigen Fällen brach.)
  • Upgrade-SSL-Module werden wichtiger sein, da Python.org-Sites sich nur in den Jahren 2017 und 2018 auf TLS 1.2 bewegen .

Es gibt gute Anweisungen auf der offiziellen Website von Virtualenv. https://pypi.python.org/pypi/virtualenv

Grundsätzlich, was ich tat, ist installieren pip mit sudo easy_install pip , dann verwendet sudo pip install virtualenv dann erstellt eine Umgebung mit: virtualenv my_env (nennen Sie es, was Sie wollen), danach habe ich: virtualenv --distribute my_env ; Die installiert distribute und pip in meinem virtualenv.

Wieder folgen Sie der Anweisung auf der virtualenv Seite.

Art von Ärger, aus Ruby kommen;

Hier ist eine nette Möglichkeit, virtualenvwrapper zu installieren (Update dieses ).

Download virtualenv-1.11.4 ( hier findest du spätestens), entpacken, offenes terminal

 # Create a bootstrapenv and activate it: $ cd ~ $ python <path to unzipped folder>/virtualenv.py bootstrapenv $ source bootstrapenv/bin/activate # Install virtualenvwrapper: $ pip install virtualenvwrapper $ mkdir -p ~/bootstrapenv/Envs # append it to file `.bashrc` $ vi ~/.bashrc source ~/bootstrapenv/bin/activate export WORKON_HOME=~/bootstrapenv/Envs source ~/bootstrapenv/bin/virtualenvwrapper.sh # run it now. $ source ~/.bashrc 

Das ist es, jetzt können Sie mkvirtualenv env1 , lsvirtualenv ..etc verwenden

Hinweis: Sie können virtualenv-1.11.4 und virtualenv-1.11.4.zip aus den Downloads-Ordnern löschen.

Die gute Nachricht ist, wenn Sie python3.4 installiert haben, ist pyvenv bereits installiert. Also nur

 pyvenv project_dir source project_dir/bin/activate python --version python 3.4.* 

Jetzt in diesem virtuellen env können Sie Pip verwenden, um Module für dieses Projekt zu installieren.

Lassen Sie diese virtuelle env, nur

 deactivate 
  • Pip Pakete nicht gefunden - Gebraute Python
  • Probleme mit Pip installieren numpy - RuntimeError: Defekte Toolchain: kann kein einfaches C-Programm verknüpfen
  • Aktiviere die Umgebung in Anaconda3
  • Python-Module nicht gefunden in virtualenv
  • Brauche ich virtualenv
  • Virtualenv yolk Problem
  • (Tensorflow auf Windows) Einrichten von virtualenv und Pfad, der vom Quellbefehl gesetzt wurde
  • Einrichten eines virtualenv: Kein Modul namens 'pip'
  • Error: konnte nicht '/usr/local/lib/python2.7/dist-packages/virtualenv_support' erstellen: Permission denied
  • Python-Setup: Befehl nicht gefunden
  • Django - Falsch konfiguriert: Modul "django.contrib.auth.middleware"
  • Python ist die beste Programmiersprache der Welt.