web-dev-qa-db-de.com

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

Kurze Frage

Hintergrund

In meine Antwort bis SO Frage 4314376 empfahl ich die Verwendung von ez_setup, damit Sie dann pip und virtualenv wie folgt installieren können:

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 Blog-Post gezogen Also möchten Sie Python auf dem Mac verwenden? . Ich mag die Idee, ein sauberes globales Site-Package-Verzeichnis zu führen Die einzigen anderen Pakete, die ich dort installiere, sind virtualenvwrapper und distribute . (Ich habe kürzlich distribute zu meiner Toolbox wegen diese Python public service announcement . Um 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

Keine setuptools und easy_install mehr

Um dass Python public service announcement wirklich zu folgen, würde ich bei einer neuen Python install 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 Zurechtweisung

In einem Kommentar zu meine Antwort zu SO Frage 4314376 , SO Benutzer Glyphe erklärte:

NEIN. NIEMALS Sudo python setup.py install wie auch immer. Schreiben Sie eine ~/.pydistutils.cfg, die Ihre Pip-Installation in ~/.local oder so setzt. Insbesondere Dateien mit dem Namen ez_setup.py neigen dazu, neuere Versionen von Dingen wie setuptools und easy_install herunterzufahren, die möglicherweise andere Dinge auf Ihrem Betriebssystem beschädigen können.

Zurück zur kurzen Frage

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

245
Matthew Rankin

Sie können dies tun, ohne irgendetwas in python selbst zu installieren.

Sie brauchen kein Sudo oder irgendwelche Privilegien.

Sie müssen keine Dateien bearbeiten.

Installieren Sie virtualenv in einer bootstrap virtuellen Umgebung. Verwenden Sie diese virtuelle Umgebung, um mehr zu erstellen. Da virtualenv mit pip und distribute ausgeliefert wird, erhalten Sie alles aus einer Installation.

  1. Laden Sie virtualenv herunter:
  2. Entpacke den Quell-Tarball
  3. Verwenden Sie den entpackten Tarball, um eine saubere virtuelle Umgebung zu erstellen. Diese virtuelle Umgebung wird verwendet, um andere zu "booten". Alle Ihre virtuellen Umgebungen enthalten automatisch Pip und Distribute.
  4. Installieren Sie virtualenv mit pip in dieser 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 setzt voraus, dass Sie keine wirklich alte Version von virtualenv verwenden. Für alte Versionen waren die Flags --no-site-packges Erforderlich (und je nach Python-Version --distribute). Jetzt können Sie Ihre bootstrap Umgebung mit nur python virtualenv.py path-to-bootstrap Oder python3 virtualenv.py path-to-bootstrap Erstellen.

173
Walker Hale IV

Ich denke, Glyph bedeutet so etwas zu tun:

  1. Erstellen Sie ein Verzeichnis ~/.local, Falls es noch nicht existiert.
  2. Stellen Sie in Ihrem ~/.bashrc Sicher, dass ~/.local/bin Auf PATH und dass ~/.local Auf PYTHONPATH steht.
  3. Erstellen Sie eine Datei ~/.pydistutils.cfg, Die enthält

    [install]
    prefix=~/.local
    

    Es ist eine Standarddatei im ConfigParser-Format.

  4. Downloaddistribute_setup.py Und führe python distribute_setup.py Aus (no Sudo). Wenn es sich über ein nicht vorhandenes Verzeichnis site-packages Beschwert, erstellen Sie es manuell:

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

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

  6. Führen Sie pip install virtualenv Aus
  7. Führen Sie pip install virtualenvwrapper Aus
  8. Erstellen Sie einen virtuellen Ordner mit einer Umgebung, sagen Sie ~/.virtualenvs
  9. In ~/.bashrc Hinzufügen

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

Das ist es, keine Verwendung von Sudo und Ihre Python Umgebung ist in ~/.local, Völlig unabhängig vom Python des Betriebssystems. Haftungsausschluss: Nicht sicher, wie kompatibel virtualenvwrapper ist in diesem Szenario - ich konnte es auf meinem System nicht testen :-)

21
Vinay Sajip

Wenn Sie die Schritte befolgen, die in mehreren Tutorials, die ich in diese Antwort verlinkt habe, empfohlen wurden, können Sie den gewünschten Effekt erzielen, ohne die etwas komplizierten "manuellen" Schritte in den Antworten von Walker und Vinay. Wenn Sie auf Ubuntu sind:

Sudo apt-get install python-pip python-dev

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

brew install python

Wenn pip installiert ist, können Sie damit die restlichen Pakete abrufen (Sie können Sudo in OS X weglassen, da Sie Ihre lokale python Installation verwenden ).

Sudo pip install virtualenvwrapper

(Dies sind die einzigen Pakete, die Sie global installieren müssen, und ich bezweifle, dass sie mit allen Systemebenen des Betriebssystems kollidieren. Wenn Sie supersicher sein möchten, können Sie die Versionen der Distribution behalten Sudo apt-get install virtualenvwrapper)

Hinweis: in Ubuntu 14.04 erhalte ich einige Fehler bei der Pip-Installation , also benutze ich pip3 install virtualenv virtualenvwrapper Und füge VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 In meine .bashrc/.zshrc Datei.

Anschließend hängen Sie an Ihre .bashrc - Datei an

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

und beschaffe es

. ~/.bashrc

Das ist es im Grunde. Jetzt müssen Sie nur noch entscheiden, ob Sie eine virtuelle Umgebung mit Paketen auf Systemebene erstellen möchten

mkvirtualenv --system-site-packages foo

wenn Ihre vorhandenen Systempakete nicht erneut installiert werden müssen, sind sie mit den Versionen des Systeminterpreters verknüpft. Hinweis: Sie können immer noch neue Pakete installieren und vorhandene Pakete aus dem System aktualisieren, ohne Sudo - Ich habe es getestet und es funktioniert ohne Unterbrechungen des Systeminterpreters.

[email protected]:~$ Sudo apt-get install python-pandas
[email protected]:~$ mkvirtualenv --system-site-packages s
(s)[email protected]:~$ pip install --upgrade pandas
(s)[email protected]:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)[email protected]:~$ deactivate
[email protected]:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

Die Alternative, wenn Sie eine vollständig getrennte Umgebung wünschen, ist

mkvirtualenv --no-site-packages bar

oder vorausgesetzt, dass dies die Standardoption ist, einfach

mkvirtualenv bar

Das Ergebnis ist, dass Sie eine neue virtuelle Umgebung haben, in der Sie Ihre Lieblingspakete frei und plötzlich installieren können

pip install flask
16
metakermit

Python 3.4 und höher

Python 3.3 fügt das venv-Modul und Python 3.4 fügt das surepip-Modul hinzu. Dies macht das Bootstrapping von pip so einfach wie:

python -m surepip

Möglicherweise geht ein Aufruf von venv voraus, um dies in einer virtuellen Umgebung zu tun.

Garantierter Pip wird in PEP 45 beschrieben.

12
gerrit

Auf Ubuntu:

Sudo apt-get install python-virtualenv

Das Paket python-pip ist eine Abhängigkeit, daher wird sie auch installiert.

10
Arik Halperin

Ich habe dieses Verfahren für uns gemacht, um es bei der Arbeit zu verwenden.

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 Sicherheitsbedürftige:

  1. curl führt eine SSL-Validierung durch. Wget nicht.
  2. Ab Pip 1.3.1 führt Pip auch die SSL-Validierung durch.
  3. Weniger Benutzer können das Pypi-Tarball als ein Github-Tarball hochladen.
5
bukzor

Update: Ab Juli 2013 wird dieses Projekt nicht mehr gepflegt. Der Autor schlägt vor, pyenv zu verwenden. (pyenv hat keine eingebaute Unterstützung für virtualenv, spielt aber Nice damit.)

Pythonbrew ist ein Versionsmanager für python und wird mit Unterstützung für virtualenv geliefert.

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

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle
5
kioopi

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

Der Unterschied besteht darin, dass das Site-Packages-Verzeichnis Ihres Betriebssystems als Ziel für das Kopieren von .py-Dateien verwendet wird.

wenn Sie möchten, dass Pip auf breiter Basis verfügbar ist, ist dies wahrscheinlich der richtige Weg. Ich sage nicht, dass andere so schlecht sind, aber das ist wahrscheinlich fair genug.

3

Installiere ActivePython . Es beinhaltet pip, virtualenv und Distribute.

3
  • 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 die Versionsinformationen nicht in einem Bash-Skript bearbeiten, um die Dinge auf dem neuesten Stand zu halten.

  • Sie müssen weder curl/wget noch tar installiert haben, noch pip oder easy_install

  • dies funktioniert sowohl für 2.7 als auch für 3.X.

Speichern Sie das Folgende in /tmp/initvenv.py:

aus zukünftigen 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
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        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]

z.B. (wenn Sie wirklich die distribute Kompatibilitätsebene für setuptools benötigen)

python /tmp/initvenv.py venv distribute

Bitte beachten Sie, dass dies bei älteren python Versionen zu InsecurePlatformWarnings¹ führen kann.

Sobald Sie Ihre virtuelle Umgebung (Name z. B. venv) haben, können Sie eine andere virtuelle Umgebung einrichten, indem Sie die gerade installierte virtualenv verwenden:

venv/bin/virtualenv venv2

virtualenvwrapper

Ich empfehle auch einen Blick auf virtualenvwrapper nach einem einmaligen Setup:

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

und Aktivierung (kann über Ihr Anmeldeskript erfolgen):

% source venv/bin/virtualenvwrapper.sh

sie können Dinge tun 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 keine Möglichkeit gefunden, die Warnung zu unterdrücken. Es könnte in pip und/oder request gelöst werden, aber die Entwickler verweisen als Ursache aufeinander. Ich habe die oft unrealistische Empfehlung erhalten, die von mir verwendete python= Version auf die neueste Version zu aktualisieren. Ich bin sicher, dass dies z. B. meine Linux Mint 17-Installation beschädigen würde. Zum Glück pip speichert Pakete zwischen, sodass die Warnung nur einmal pro Paketinstallation ausgegeben wird.

2
Anthon

Ich bin vor kurzem auf dasselbe Problem gestoßen. Ich beschäftige mich immer mehr mit der Einstellung "Immer ein virtuelles Env verwenden". Daher bestand mein Problem darin, virtuelles Env mit pip zu installieren, ohne "Distribute" in mein globales Verzeichnis oder in das Verzeichnis für Benutzer-Site-Packages zu installieren. Zu diesem Zweck habe ich Distribute, Pip und Virtualenv manuell heruntergeladen und für jedes Paket "python setup.py install --prefix ~/.local/python-private" (mit der temporären Einstellung PYTHONPATH = ~/.local /) ausgeführt. python-private), so dass Setup-Skripte Distribute finden konnten). Ich habe das virtualenv-Skript in ein anderes Verzeichnis in meinem PATH verschoben und es so bearbeitet, dass die Distribute- und Virtualenv-Module auf sys.path zu finden sind. Tada: Ich habe nichts in/usr,/usr/local oder in meinem Benutzer-Site-Paketverzeichnis installiert, aber ich kann virtualenv überall ausführen, und in diesem virtualenv bekomme ich pip.

2
Éric Araujo

Ich hatte verschiedene Probleme (siehe unten) beim Installieren von aktualisierten SSL-Modulen, sogar in einer virtuellen Umgebung, auf älteren, vom Betriebssystem bereitgestellten Python -Versionen. Daher verwende ich jetzt pyenv.

pyenv erleichtert die Installation neuer Python Versionen und unterstützt Virtualenvs. Der Einstieg ist viel einfacher als die in anderen Antworten aufgeführten Rezepte für virtualenv:

  • Geben Sie auf dem Mac brew install pyenv Ein und verwenden Sie unter Linux pyenv-installer
  • dadurch erhalten Sie eine integrierte Virtualenv-Unterstützung sowie einen Versionswechsel zwischen Python (falls erforderlich).
  • funktioniert gut mit Python 2 oder 3, kann mehrere Versionen gleichzeitig installieren

Dies funktioniert sehr gut, um die "neue Python" -Version und virtualenv von System Python zu isolieren. Da Sie auf einfache Weise ein neueres Python (nach 2.7.9) verwenden können, sind die SSL-Module bereits aktualisiert, und natürlich sind Sie wie bei jedem modernen Virtualenv-Setup vom System Python isoliert. Module.

Ein paar nette Tutorials:

Das Plugin pyenv-virtualenv Ist jetzt eingebaut - überprüfen Sie es mit pyenv commands | grep virtualenv. Ich würde das pyenv-virtualenvwrapper-Plugin nicht verwenden, um damit zu beginnen. Sehen Sie, wie Sie mit pyenv-virtualenv umgehen, das stärker in pyenv integriert ist, da dies den größten Teil der Aufgaben von virtualenvwrapper abdeckt.

pyenv basiert auf rbenv (ein gutes Werkzeug für den Ruby Versionswechsel) und ist nur von bash abhängig.

  • pyenv hat nichts mit dem sehr ähnlich benannten pyvenv zu tun - das ist ein Virtualenv-Äquivalent, das Teil der jüngsten Python 3-Versionen ist und das Wechseln der Python -Version nicht behandelt

Vorbehalte

Zwei Warnungen vor pyenv:

  1. Es funktioniert nur mit einer Bash oder einer ähnlichen Shell - oder genauer gesagt, das pyenv-virtualenv-Plugin mag nicht dash, was unter Ubuntu oder Debian /bin/sh Ist.
  2. Es muss über eine interaktive Login-Shell (z. B. bash --login Mit einem Terminal) ausgeführt werden, was mit Automatisierungstools wie Ansible nicht immer einfach zu erreichen ist.

Daher eignet sich pyenv am besten für die interaktive Verwendung und weniger für Skriptserver.

Probleme mit dem SSL-Modul

Ein Grund für die Verwendung von pyenv ist, dass beim Upgrade von Python SSL-Modulen häufig Probleme auftreten, wenn ältere vom System bereitgestellte Python Versionen verwendet werden:

2
RichVel

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

Grundsätzlich habe ich pip mit Sudo easy_install pip Installiert, dann Sudo pip install virtualenv Verwendet und dann eine Umgebung mit virtualenv my_env Erstellt (benenne sie, was du willst) das habe ich getan: virtualenv --distribute my_env; welches distribute und pip in meinem virtualenv anbrachte.

Folgen Sie erneut den Anweisungen auf der Seite virtualenv.

Eine Art Ärger, der von Ruby; P

0
Victor S

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

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

Jetzt können Sie in dieser virtuellen Umgebung mit pip Module für dieses Projekt installieren.

Lassen Sie diese virtuelle Umgebung einfach

deactivate
0
maoyang

Hier ist ein guter Weg, um virtualenvwrapper zu installieren (Update von this ).

Download virtualenv-1.11.4 (finden Sie spätestens unter hier ), Entpacken, öffnen Sie 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.

0
suhailvs