pip
, virtualenv
y distribute
? En mi respuesta a la pregunta SO 4314376 , recomendé usar ez_setup
para que luego pueda instalar pip
y virtualenv
siguiente manera:
curl -O http://peak.telecommunity.com/dist/ez_setup.py sudo python ez_setup.py sudo easy_install pip sudo pip install virtualenv
Originalmente saqué estas instrucciones de la publicación del blog de Jesse Noller. ¿Así que quieres usar Python en la Mac? . Me gusta la idea de mantener un directorio de paquetes de sitio global limpio, por lo que los únicos otros paquetes que instalo son virtualenvwrapper
y distribute
. (Recientemente agregué distribute
a mi caja de herramientas debido a este anuncio de servicio público de Python . Para instalar estos dos paquetes, utilicé:
sudo pip install virtualenvwrapper curl -O http://python-distribute.org/distribute_setup.py sudo python distribute_setup.py
Para seguir realmente ese anuncio de servicio público de Python , en una instalación nueva de Python, haría lo siguiente:
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
En un comentario a mi respuesta a la pregunta SO 4314376 , el usuario de Glyph declaró:
NO. NUNCA NUNCA realice
sudo python setup.py install
lo que sea. Escribe un ~ / .pydistutils.cfg que ponga tu instalación pip en ~ / .local o algo así. Especialmente los archivos con el nombreez_setup.py
tienden a absorber versiones más recientes de elementos como setuptools y easy_install, que potencialmente pueden romper otras cosas en su sistema operativo.
- Cómo copiar / clonar un entorno virtual del servidor a la máquina local
- Frasco instalado en un virtualenv todavía "comando no encontrado"
- Virtualenv ". venv / bin / activar ”vs“ fuente venv / bin / activar ”
- Cargar automáticamente un virtualenv cuando se ejecuta un script
- Llamando a IPython desde un virtualenv
Así que la respuesta de Glyph me lleva a mi pregunta original:
pip
, virtualenv
y distribute
? Puedes hacer esto sin instalar nada en Python.
No necesitas sudo ni ningún privilegio.
No necesitas editar ningún archivo.
Instale virtualenv en un entorno virtual bootstrap. Utiliza ese entorno virtual para crear más. Como virtualenv se envía con pip y distribuye, obtiene todo de una instalación.
Aquí hay un ejemplo 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
Ahora puedes usar tu entorno “bootstrap” para crear más:
# Create a second environment from the first: $INITIAL_ENV/bin/virtualenv py-env1 # Create more: $INITIAL_ENV/bin/virtualenv py-env2
¡Vete loco!
Esto supone que no está utilizando una versión realmente antigua de virtualenv. Las versiones anteriores requerían los indicadores --no-site-packges
(y, dependiendo de la versión de Python, --distribute
). Ahora puede crear su entorno bootstrap con solo python virtualenv.py path-to-bootstrap
o python3 virtualenv.py path-to-bootstrap
.
Creo que Glyph significa hacer algo como esto:
~/.local
, si aún no existe. ~/.bashrc
, asegúrese de que ~/.local/bin
esté en PATH
y que ~/.local
esté en PYTHONPATH
. Cree un archivo ~/.pydistutils.cfg
que contenga
[install] prefix=~/.local
Es un archivo estándar de formato ConfigParser.
Descarga distribute_setup.py
y ejecuta python distribute_setup.py
(no sudo
). Si se queja sobre un directorio de site-packages
no existente, créelo manualmente:
mkdir -p ~ / .local / lib / python2.7 / site-packages /
Ejecute which easy_install
para verificar que proviene de ~/.local/bin
pip install virtualenv
pip install virtualenvwrapper
~/.virtualenvs
En ~/.bashrc
añadir
export WORKON_HOME source ~/.local/bin/virtualenvwrapper.sh
Eso es todo, no uso de sudo
en absoluto y su entorno Python está en ~/.local
, completamente separado de Python del sistema operativo. Descargo de responsabilidad: no estoy seguro de la compatibilidad virtualenvwrapper
en este escenario; no pude probarlo en mi sistema 🙂
Si sigue los pasos recomendados en varios tutoriales que vinculé en esta respuesta , puede obtener el efecto deseado sin los pasos “manuales” un tanto complicados en las respuestas de Walker y Vinay. Si estás en Ubuntu:
sudo apt-get install python-pip python-dev
El equivalente se logra en OS X usando homebrew para instalar python (más detalles aquí ).
brew install python
Con pip
instalado, puedes usarlo para obtener los paquetes restantes (puedes omitir sudo
en OS X, ya que estás usando la instalación local de Python).
sudo pip install virtualenvwrapper
(estos son los únicos paquetes que necesita que se instalen globalmente y dudo que entren en conflicto con cualquier sistema del sistema operativo. Si desea ser súper seguro, puede mantener las versiones de la distro sudo apt-get install virtualenvwrapper
)
Nota: en Ubuntu 14.04 recibo algunos errores con pip install , así que uso pip3 install virtualenv virtualenvwrapper
y agrego VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
a mi archivo .bashrc/.zshrc
.
A continuación, agregue a su archivo .bashrc
export WORKON_HOME source /usr/local/bin/virtualenvwrapper.sh
y la fuente
. ~/.bashrc
Esto es básicamente eso. Ahora, la única decisión es si desea crear un virtualenv para incluir paquetes a nivel de sistema
mkvirtualenv --system-site-packages foo
donde no es necesario reinstalar los paquetes de su sistema existente, están vinculados a las versiones del intérprete del sistema. Nota: aún puede instalar nuevos paquetes y actualizar los paquetes incluidos desde el sistema sin sudo; lo probé y funciona sin interrupciones del intérprete del sistema.
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
La alternativa, si quieres un entorno completamente separado, es
mkvirtualenv --no-site-packages bar
o dado que esta es la opción por defecto, simplemente
mkvirtualenv bar
El resultado es que tiene un nuevo virtualenv donde puede instalar sus paquetes favoritos de forma libre y sin errores.
pip install flask
Python 3.3 agrega el módulo venv , y Python 3.4 agrega el módulo ensurepip . Esto hace que bootprapping pip sea tan fácil como:
python -m ensurepip
Quizás precedido por una llamada a venv
para hacerlo dentro de un entorno virtual.
El pip garantizado se describe en PEP 453 .
En Ubuntu:
sudo apt-get install python-virtualenv
El paquete python-pip
es una dependencia, por lo que también se instalará.
Hice este procedimiento para que lo usemos en el trabajo.
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.
Puntos clave para la seguridad:
Actualización: A partir de julio de 2013 este proyecto ya no se mantiene. El autor sugiere usar pyenv . (Pyenv no tiene soporte incorporado para virtualenv, pero juega bien con él).
Pythonbrew es un administrador de versiones para python y viene con soporte para virtualenv.
Después de instalar pythonbrew y una versión de python usando venvs es realmente fácil:
# Initializes the virtualenv pythonbrew venv init # Create a virtual/sandboxed environment pythonbrew venv create mycoolbundle # Use it pythonbrew venv use mycoolbundle
No hay problema para hacer sudo python setup.py install, si estás seguro de que es lo que quieres hacer.
La diferencia es que utilizará el directorio site-packages de su sistema operativo como destino para copiar los archivos .py.
Por lo tanto, si quieres que pip sea accesible al ancho, probablemente ese sea el camino a seguir. No digo que los demás sean malos, pero probablemente sea lo suficientemente justo.
Instalar ActivePython . Incluye pip, virtualenv y Distribute.
Me encontré con el mismo problema recientemente. Me estoy volviendo más parcial a la mentalidad de “usar siempre un virtualenv”, por lo que mi problema fue instalar virtualenv con pip sin instalar, distribuir a mi directorio global o usuario de paquetes de sitios. Para hacer esto, descargué manualmente distribuir, pip y virtualenv, y para cada uno ejecuté “python setup.py install –prefix ~ / .local / python-private” (con una configuración temporal de PYTHONPATH = ~ / .local / python-private) para que los scripts de configuración pudieran encontrar distribuir). He movido el script virtualenv a otro directorio que tengo en mi RUTA y lo edité para que los módulos de distribución y virtualenv se puedan encontrar en sys.path. Tada: No instalé nada en / usr, / usr / local ni en mi directorio de paquetes de usuario, pero puedo ejecutar virtualenv en cualquier lugar, y en ese virtualenv obtengo pip.
He tenido varios problemas (ver más abajo) al instalar módulos SSL actualizados, incluso dentro de un virtualenv, además de las versiones antiguas de Python provistas por el sistema operativo, así que ahora uso pyenv
.
pyenv hace que sea muy fácil instalar nuevas versiones de Python y es compatible con virtualenvs. Comenzar es mucho más fácil que las recetas para virtualenv enumeradas en otras respuestas:
brew install pyenv
y en Linux, use pyenv-installer Esto funciona muy bien para aislar la versión “new Python” y virtualenv del sistema Python. Debido a que puede usar un Python más reciente (post 2.7.9), los módulos SSL ya están actualizados y, por supuesto, como cualquier configuración virtualenv moderna, está aislado de los módulos Python del sistema.
Un par de buenos tutoriales:
pyenv global 3.6.1
(global al usuario actual) o pyenv local 2.7.13
(local al directorio actual). El pyenv-virtualenv
ahora está integrado en – escriba pyenv commands | grep virtualenv
pyenv commands | grep virtualenv
para comprobar. No usaría el plugin pyenv-virtualenvwrapper para comenzar; vea cómo le va con pyenv-virtualenv, que está más integrado en pyenv, ya que cubre la mayor parte de lo que hace virtualenvwrapper.
pyenv
se basa en rbenv
(una buena herramienta para el cambio de versión de Ruby) y su única dependencia es bash.
pyvenv
, que es un equivalente pyvenv
que forma parte de las versiones recientes de Python 3, y no controla el cambio de versión de Python Dos advertencias sobre pyenv:
dash
, que es /bin/sh
en Ubuntu o Debian. bash --login
usando un terminal), lo que no siempre es fácil de lograr con herramientas de automatización como Ansible . Por lo tanto, pyenv es mejor para uso interactivo y menos bueno para servidores de scripting.
Una razón para usar pyenv
es que a menudo hay problemas con la actualización de los módulos SSL de Python al usar versiones anteriores de Python proporcionadas por el sistema:
Puedes hacer esto sin instalar nada en Python.
No necesitas sudo ni ningún privilegio.
No es necesario encontrar la última versión de un archivo tar virtualenv
No es necesario editar la información de la versión en un script de bash para mantener las cosas actualizadas.
No necesitas tener instalado curl
/ wget
o tar
, ni pip
o easy_install
esto funciona tanto para 2.7 como para 3.X
Guarde lo siguiente en /tmp/initvenv.py
:
de la importación de la función de impresión
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
y usarlo como
python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]
por ejemplo (si realmente necesita la capa de compatibilidad de distribute
para setuptools
)
python /tmp/initvenv.py venv distribute
Tenga en cuenta que, con versiones anteriores de python, esto podría proporcionarle InsecurePlatformWarning
s¹.
Una vez que tenga su virtualenv (nombre, por ejemplo, venv
), puede configurar otro virtualenv utilizando el virtualenv
acaba de instalar:
venv/bin/virtualenv venv2
También recomiendo echar un vistazo a virtualenvwrapper , después de una configuración única:
% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper
y activación (se puede hacer desde su script de inicio de sesión):
% source venv/bin/virtualenvwrapper.sh
puedes hacer cosas como
% 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)%
¹ No he encontrado una manera de suprimir la advertencia. Podría resolverse en pip
y / o request
, pero los desarrolladores apuntan entre sí como la causa. Recibí la recomendación, a menudo no realista, de actualizar la versión de python que estaba usando a la última versión. Estoy seguro de que esto se rompería, por ejemplo, mi instalación de Linux Mint 17. Afortunadamente, los paquetes de caché de pip
, por lo que la Advertencia se hace solo una vez por instalación de paquete.
Hay buenas instrucciones en el sitio oficial de Virtualenv. https://pypi.python.org/pypi/virtualenv
Básicamente, lo que hice fue instalar pip
con sudo easy_install pip
, luego usar sudo pip install virtualenv
luego crear un entorno con: virtualenv my_env
(nombre que quieras), siguiendo lo que hice: virtualenv --distribute my_env
; Que instalé distribute
y pip
en mi virtualenv.
Una vez más, siga las instrucciones en la página virtualenv
.
Una especie de molestia, viniendo de Ruby; P
Descargue virtualenv-1.11.4 (puede encontrar las últimas noticias aquí ), descomprímalo, abra el terminal
# Create a bootstrapenv and activate it: $ cd ~ $ python /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
Eso es todo, ahora puedes usar mkvirtualenv env1
, lsvirtualenv
..etc
Nota: puede eliminar virtualenv-1.11.4
y virtualenv-1.11.4.zip
de las carpetas de descargas.
La buena noticia es que si ha instalado python3.4, ya se ha instalado pyvenv. Por lo que sólo
pyvenv project_dir source project_dir/bin/activate python --version python 3.4.*
Ahora en este entorno virtual, puede usar pip para instalar módulos para este proyecto.
Deja este env virtual, solo
deactivate