pip
, virtualenv
et distribute
?Dans ma réponse à SO question 4314376 , j'ai recommandé d'utiliser ez_setup
afin que vous puissiez ensuite installer pip
et virtualenv
comme suit:
curl -O http://peak.telecommunity.com/dist/ez_setup.py
Sudo python ez_setup.py
Sudo easy_install pip
Sudo pip install virtualenv
À l'origine, j'ai extrait ces instructions du billet de blog de Jesse Noller . Vous voulez donc utiliser Python sur Mac? . J'aime l'idée de conserver un répertoire site-packages global propre, de sorte que les seuls packages que j'installe sont virtualenvwrapper
et distribute
. (J'ai récemment ajouté distribute
à ma boîte à outils à cause de ceci Python annonce de service public . Pour installer ces deux paquets, j'ai utilisé:
Sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
Sudo python distribute_setup.py
Pour vraiment suivre que Python annonce de service public , sur une nouvelle installation Python, je procéderais comme suit: :
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
Dans un commentaire à ma réponse à SO question 4314376 , SO utilisateur Glyph a déclaré:
NON. JAMAIS JAMAIS
Sudo python setup.py install
quoi que ce soit. Ecrivez un fichier ~/.pydistutils.cfg qui place votre installation de pip dans ~/.local ou quelque chose du genre. En particulier, les fichiers nommésez_setup.py
tendent à engloutir les versions les plus récentes d'éléments tels que setuptools et easy_install, qui peuvent potentiellement endommager d'autres éléments de votre système d'exploitation.
Donc la réponse de Glyph m'amène à ma question initiale:
pip
, virtualenv
et distribute
?Vous pouvez le faire sans rien installer dans python lui-même.
Vous n'avez pas besoin de Sudo ni de privilèges.
Vous n'avez pas besoin de modifier aucun fichier.
Installez virtualenv dans un environnement virtuel bootstrap. Utilisez l'environnement virtuel pour en créer davantage. Depuis que virtualenv est livré avec pip et distribution, vous obtenez tout en une installation.
Voici un exemple en 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
Maintenant, vous pouvez utiliser votre environnement "bootstrap" pour en créer plus:
# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2
Devenir fou!
Cela suppose que vous n'utilisez pas une version très ancienne de virtualenv. Les anciennes versions nécessitaient les indicateurs --no-site-packges
(et, selon la version de Python, --distribute
). Vous pouvez maintenant créer votre environnement bootstrap avec juste python virtualenv.py path-to-bootstrap
ou python3 virtualenv.py path-to-bootstrap
.
Je pense que Glyph signifie faire quelque chose comme ceci:
~/.local
, s'il n'existe pas déjà.~/.bashrc
, assurez-vous que ~/.local/bin
est sur PATH
et que ~/.local
est sur PYTHONPATH
.Créez un fichier ~/.pydistutils.cfg
qui contient
[install]
prefix=~/.local
C'est un fichier standard au format ConfigParser.
Téléchargerdistribute_setup.py
et exécuter python distribute_setup.py
(no Sudo
). S'il se plaint d'un répertoire site-packages
non existant, créez-le manuellement:
mkdir -p ~/.local/lib/python2.7/site-packages /
Exécutez which easy_install
pour vérifier qu'il provient bien de ~/.local/bin
pip install virtualenv
pip install virtualenvwrapper
~/.virtualenvs
Dans ~/.bashrc
add
export WORKON_HOME
source ~/.local/bin/virtualenvwrapper.sh
Ça y est, aucune utilisation de Sudo
et votre environnement Python est dans ~/.local
, complètement séparé de Python du système d'exploitation. Clause de non-responsabilité: Je ne suis pas sûr de la compatibilité de virtualenvwrapper
dans ce scénario - je n’ai pas pu le tester sur mon système :-)
Si vous suivez les étapes conseillées dans plusieurs tutoriels auxquels j'ai lié cette réponse , vous pouvez obtenir l'effet souhaité sans les étapes "manuelles" quelque peu compliquées des réponses de Walker et Vinay. Si vous êtes sur Ubuntu:
Sudo apt-get install python-pip python-dev
L'équivalent est obtenu sous OS X en utilisant homebrew pour installer python (plus de détails ici ).
brew install python
Avec pip
installé, vous pouvez l’utiliser pour récupérer les derniers paquets (vous pouvez omettre Sudo
dans OS X, car vous utilisez votre installation locale python).
Sudo pip install virtualenvwrapper
(Ce sont les seuls packages dont vous avez besoin d'être installés globalement et je doute qu'il se heurte à quoi que ce soit au niveau du système depuis le système d'exploitation. Si vous voulez être super sûr, vous pouvez conserver les versions de la distribution Sudo apt-get install virtualenvwrapper
)
Remarque: sous Ubuntu 14.04, je reçois quelques erreurs avec pip install , donc j'utilise pip3 install virtualenv virtualenvwrapper
et ajoute VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
dans mon fichier .bashrc/.zshrc
.
Vous ajoutez ensuite à votre fichier .bashrc
export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh
et le source
. ~/.bashrc
C'est fondamentalement ça. Maintenant, la seule décision est de savoir si vous voulez créer un virtualenv pour inclure des packages au niveau du système
mkvirtualenv --system-site-packages foo
là où vos packages système existants ne doivent pas être réinstallés, ils sont liés symboliquement aux versions de l'interpréteur système. Remarque: vous pouvez toujours installer de nouveaux packages et mettre à niveau les packages inclus du système existants sans Sudo. Je l'ai testé et il fonctionne sans interruption de l'interpréteur système.
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
L'alternative, si vous voulez un environnement complètement séparé, est
mkvirtualenv --no-site-packages bar
ou étant donné que c'est l'option par défaut, simplement
mkvirtualenv bar
Le résultat est que vous avez un nouveau virtualenv où vous pouvez installer librement et rapidement vos paquets préférés
pip install flask
Python 3.3 ajoute le module venv , et Python 3.4 ajoute le module Ensurepip . Cela rend l'amorçage pip aussi simple que:
python -m Ensurepip
Peut-être précédé d'un appel à venv
pour le faire dans un environnement virtuel.
Le pip garanti est décrit dans PEP 45 .
Sur Ubuntu:
Sudo apt-get install python-virtualenv
Le paquet python-pip
est une dépendance, il sera donc également installé.
J'ai conçu cette procédure pour que nous l'utilisions au travail.
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.
Points clés pour les soucieux de la sécurité:
Mise à jour: Depuis juillet 2013, ce projet n'est plus mis à jour. L'auteur suggère d'utiliser pyenv . (pyenv ne prend pas en charge virtualenv, mais joue à Nice avec.)
Pythonbrew est un gestionnaire de version pour python et est fourni avec le support de virtualenv.
Après avoir installé pythonbrew et une version python avec venvs, c’est très simple:
# Initializes the virtualenv
pythonbrew venv init
# Create a virtual/sandboxed environment
pythonbrew venv create mycoolbundle
# Use it
pythonbrew venv use mycoolbundle
Il n’ya aucun problème à faire Sudo python setup.py installer, si vous êtes sûr que c’est ce que vous voulez faire.
La différence est qu’il utilisera le répertoire site-packages de votre système d’exploitation comme destination des fichiers .py à copier.
donc, si vous voulez que pip soit accessible à une large échelle, c'est probablement la voie à suivre. Je ne dis pas que les autres manières sont mauvaises, mais c'est probablement assez juste.
Installez ActivePython . Il comprend pip, virtualenv et Distribute.
Vous pouvez le faire sans rien installer dans python lui-même.
Vous n'avez pas besoin de Sudo ni de privilèges.
Vous n'avez pas besoin de trouver la dernière version d'un fichier tar virtualenv
Vous n'avez pas besoin de modifier les informations de version dans un script bash pour maintenir les informations à jour.
Vous n'avez pas besoin de curl
/wget
ou tar
ni de pip
ou easy_install
cela fonctionne pour 2.7 ainsi que pour 3.X
Enregistrez les éléments suivants dans /tmp/initvenv.py
:
depuis 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
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
et l'utiliser comme
python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]
par exemple. (si vous avez vraiment besoin du calque de compatibilité distribute
pour setuptools
)
python /tmp/initvenv.py venv distribute
Veuillez noter que, avec les anciennes versions de python, ceci pourrait vous donner InsecurePlatformWarning
s¹.
Une fois que vous avez votre virtualenv (nom, par exemple venv
), vous pouvez configurer un autre virtualenv à l’aide du fichier virtualenv
que vous venez d’installer:
venv/bin/virtualenv venv2
Je recommande de jeter un oeil à virtualenvwrapper également, après une configuration unique:
% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper
et activation (peut être effectué à partir de votre script de connexion):
% source venv/bin/virtualenvwrapper.sh
vous pouvez faire des choses comme:
% 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)%
¹ Je n'ai pas trouvé le moyen de supprimer l'avertissement. Cela pourrait être résolu dans pip
et/ou request
, mais les développeurs se désignent mutuellement comme étant la cause. J'ai reçu la recommandation, souvent peu réaliste, de mettre à niveau la version python que j'utilisais vers la dernière version. Je suis sûr que cela briserait par exemple mon installation de Linux Mint 17. Heureusement, pip
met les paquets en cache, de sorte que l'avertissement est émis une seule fois par installation de paquet.
Je suis tombé sur le même problème récemment. Je suis de plus en plus partisan de l’esprit "toujours utiliser un virtualenv". Mon problème était donc d’installer virtualenv avec pip sans installer la distribution dans mon répertoire global ou de packages de sites utilisateur. Pour ce faire, j'ai téléchargé manuellement les commandes distribution, pip et virtualenv. Pour chacune d’elles, j’ai exécuté "python setup.py install --prefix ~/.local/python-private" (avec un paramètre temporaire de PYTHONPATH = ~/.local/python-private) afin que les scripts d'installation puissent trouver la distribution). J’ai déplacé le script virtualenv vers un autre répertoire de mon chemin PATH et je l’ai édité de manière à ce que les modules de distribution et virtualenv soient disponibles sur sys.path. Tada: Je n'ai rien installé dans/usr,/usr/local ou dans mon répertoire site-packages utilisateur, mais je peux exécuter virtualenv n'importe où, et dans ce virtualenv, j'obtiens pip.
J'ai eu divers problèmes (voir ci-dessous) lors de l'installation de modules SSL mis à niveau, même à l'intérieur d'un environnement virtuel, par-dessus d'anciennes versions de Python fournies par le système d'exploitation. J'utilise donc maintenant pyenv
.
pyenv facilite l'installation d'une nouvelle version de Python et prend en charge virtualenvs. La mise en route est beaucoup plus facile que les recettes de virtualenv listées dans d'autres réponses:
brew install pyenv
et sous Linux, utilisez pyenv-installerCela fonctionne très bien pour isoler la version "nouvelle Python" et virtualenv du système Python. Comme vous pouvez facilement utiliser un Python plus récent (post 2.7.9), les modules SSL sont déjà mis à niveau et, bien entendu, comme toute configuration virtualenv moderne, vous êtes isolé du système Python modules.
Quelques tutoriels sympas:
pyenv global 3.6.1
(global pour l'utilisateur actuel) ou pyenv local 2.7.13
(local dans le répertoire actuel ).Le plugin pyenv-virtualenv
est maintenant intégré - tapez pyenv commands | grep virtualenv
à vérifier. Pour commencer, je n’utiliserais pas le plug-in pyenv-virtualenvwrapper - vous verrez comment vous en sortez avec pyenv-virtualenv, qui est plus intégré dans pyenv, car il couvre la plupart des tâches de virtualenvwrapper.
pyenv
est calqué sur rbenv
(un bon outil pour le changement de version de Ruby) et sa seule dépendance est bash.
pyvenv
- c’est un équivalent virtuel qui fait partie des versions récentes de Python 3 et ne gère pas le changement de version de PythonDeux avertissements à propos de pyenv:
dash
, qui est /bin/sh
sous Ubuntu ou Debian.bash --login
à l'aide d'un terminal), ce qui n'est pas toujours facile à réaliser avec des outils d'automatisation tel que Ansible .C'est pourquoi pyenv est le meilleur pour une utilisation interactive et moins bon pour les serveurs de script.
Une des raisons d'utiliser pyenv
est qu'il existe souvent des problèmes de mise à niveau des modules Python SSL lors de l'utilisation d'anciennes versions de Python fournies par le système:
Il y a de bonnes instructions sur le site officiel de Virtualenv. https://pypi.python.org/pypi/virtualenv
Fondamentalement, ce que j’ai fait est d’installer pip
avec Sudo easy_install pip
, puis d’utiliser Sudo pip install virtualenv
, puis de créer un environnement avec: virtualenv my_env
(nommez-le comme vous voulez), en suivant ce que j’ai fait: virtualenv --distribute my_env
; qui a installé distribute
et pip
dans mon virtualenv.
Encore une fois, suivez les instructions sur la page virtualenv
.
Un genre de problème, venant de Ruby; P
La bonne nouvelle est que si vous avez installé python3.4, pyvenv est déjà installé. Alors, juste
pyvenv project_dir
source project_dir/bin/activate
python --version
python 3.4.*
Maintenant, dans cet env virtuel, vous pouvez utiliser pip pour installer des modules pour ce projet.
Quitter cet env virtuel, juste
deactivate
Téléchargez virtualenv-1.11.4 (vous pouvez trouver le dernier à ici ), décompressez-le, ouvrez 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
Voilà, vous pouvez maintenant utiliser mkvirtualenv env1
, lsvirtualenv
..etc
Remarque: vous pouvez supprimer virtualenv-1.11.4
et virtualenv-1.11.4.Zip
des dossiers Téléchargements.