¿Cómo instalar un paquete dentro de virtualenv?

He creado un virtualenv con el siguiente comando.

mkvirtualenv --distribute --system-site-packages "$1" 

Después de iniciar el virtualenv con workon , ipython . Me incita

 WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv. 

Cuando bash instalar ipython con virtualenv, recibí el siguiente mensaje de error:

 pip install ipython Requirement already satisfied (use --upgrade to upgrade): ipython in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages Cleaning up... 

¿Alguien sabe como instalar dentro del virtualenv?

Crea tu virtualenv con --no-site-packages si no quieres que pueda usar bibliotecas externas:

 virtualenv --no-site-packages my-virtualenv . my-virtualenv/bin/activate pip install ipython 

De lo contrario, como en su ejemplo, puede ver una biblioteca instalada en el entorno Python de su sistema que satisface la dependencia solicitada.

Evitar los dolores de cabeza y las mejores prácticas:

  • ¡Los entornos virtuales no son parte de su proyecto git (no necesitan ser versionados)!

  • Crea una carpeta para tus entornos virtuales.

  • Después de activar el entorno virtual de su proyecto, nunca ” sudo pip install package “.
  • Después de terminar su trabajo, siempre ” desactive ” su entorno.
  • Evita renombrar la carpeta de tu proyecto.

Para una mejor representación, aquí hay una simulación:

Creando una carpeta para tus proyectos / entornos.

 $ mkdir venv 

entorno de creación

 $ cd venv/ $ virtualenv google_drive New python executable in google_drive/bin/python Installing setuptools, pip...done. 

entorno activador

 $ source google_drive/bin/activate 

instalando paquetes

 (google_drive) $ pip install PyDrive Downloading/unpacking PyDrive Downloading PyDrive-1.3.1-py2-none-any.whl ... ... ... Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules Cleaning up... 

Paquete disponible dentro del entorno.

 (google_drive) $ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> import pydrive.auth >>> >>> gdrive = pydrive.auth.GoogleAuth() >>> 

desactivar entorno

 (google_drive) $ deactivate $ 

Paquete NO DISPONIBLE fuera del entorno.

 $ python Python 2.7.6 (default, Oct 26 2016, 20:32:10) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> import pydrive.auth Traceback (most recent call last): File "", line 1, in  ImportError: No module named pydrive.auth >>> 

Notas:

¿Por qué no sudo?

Virtualenv crea un entorno completamente nuevo para usted, definiendo $ PATH y algunas otras variables y configuraciones. Cuando usa el paquete de instalación sudo pip , está ejecutando Virtualenv como root , evitando todo el entorno creado y luego, instalando el paquete en los paquetes de sitios globales, y no dentro de la carpeta del proyecto donde tiene un entorno virtual, aunque Han activado el medio ambiente.

Si renombras la carpeta de tu proyecto …

… tendrá que ajustar algunas variables de algunos archivos dentro del directorio bin de su proyecto.

Por ejemplo:

bin / pip, línea 1 (She Bang)

bin / activar, línea 42 (VIRTUAL_ENV)

Bueno, no tengo una razón adecuada para explicar por qué ocurre este comportamiento, pero luego encontré una pequeña solución.

Dentro del entorno virtual

 pip install -Iv package_name==version_number 

Ahora esto instalará la versión en su entorno virtual.

Además puedes consultar dentro del entorno virtual con este

 pip install yolk yolk -l 

Esto le dará los detalles de todos los paquetes instalados en ambas ubicaciones (sistema y virtualenv)

Mientras que algunos podrían decir que no es apropiado usar –system-site-packages (puede ser cierto), pero ¿qué pasa si ya has hecho muchas cosas dentro de tu virtualenv? Ahora no quieres rehacer todo desde cero.

Puedes usar esto como un truco y tener cuidado la próxima vez 🙂

Para Python 3:

 pip3 install virtualenv python3 -m venv venv_name source venv_name/bin/activate #key step pip3 install "package-name" 

Para utilizar el entorno que virtualenv ha creado, primero debe source env/bin/activate . Después de eso, simplemente instale los paquetes usando pip install package-name .

Para aclarar aún más la otra respuesta aquí:

Bajo la versión actual de virtualenv, la marca –no-site-packages es el comportamiento predeterminado, por lo que no es necesario que lo especifique. Sin embargo, está anulando el valor predeterminado utilizando explícitamente el indicador –system-site-packages, y probablemente no sea lo que desea. El comportamiento predeterminado (sin especificar ninguno de los indicadores) es crear el entorno virtual de modo que cuando lo esté utilizando, no se pueda acceder a ningún paquete de Python instalado fuera del entorno. Esta suele ser la elección correcta porque aísla mejor el entorno virtual de su entorno informático local. Los paquetes de Python instalados en el entorno no afectarán su computadora local y viceversa.

En segundo lugar, para usar un entorno virtual después de que se haya creado, debe navegar en el directorio del entorno virtual y luego ejecutar:

 bin/activate 

Lo que esto hace es configurar las variables de entorno para que los paquetes de Python y cualquier ejecutable en las carpetas bin del entorno virtual se utilicen antes que los de las ubicaciones estándar en su computadora local. Entonces, por ejemplo, cuando escribe “pip”, la versión de pip que está dentro de su entorno virtual se ejecutará en lugar de la versión de pip en su máquina local. Esto es deseable porque pip dentro del entorno virtual instalará paquetes dentro del entorno virtual.

El problema que tiene es que está ejecutando progtwigs (como ipython) desde su máquina local, cuando en su lugar desea instalar y ejecutar copias de esos progtwigs aislados dentro de su entorno virtual. Se configura creando el entorno (sin especificar ninguna marca de paquete de sitio si está utilizando la versión actual), ejecutando el script de activación mencionado anteriormente, y luego ejecutando pip para instalar cualquier paquete que necesite (que irá dentro del entorno).

Tuve el mismo problema y los --no-site-packages -no --no-site-packages no funcionaron para mí. Descubrí en este archivo de lista de correo más antiguo que puede forzar una instalación en el virtualenv usando el indicador -U para pip, por ejemplo, pip -U ipython . Puede verificar que esto funciona con el comando bash which ipython mientras está en virtualenv.

fuente: https://mail.python.org/pipermail/python-list/2010-March/571663.html

De la documentación https://docs.python.org/3/library/venv.html :

La secuencia de comandos de pyvenv ha sido desaprobada a partir de Python 3.6 en favor de usar python3 -m venv para ayudar a evitar cualquier posible confusión sobre en qué intérprete de Python se basará un entorno virtual.

Para crear un entorno virtual para un proyecto en particular, cree un archivo /home/user/path/to/create_venv.sh :

 #!/usr/bin/env bash # define path to your project's directory PROJECT_DIR=/home/user/path/to/Project1 # a directory with virtual environment # will be created in your Project1 directory # it recommended to add this path into your .gitignore VENV_DIR="${PROJECT_DIR}"/venv # https://docs.python.org/3/library/venv.html python3 -m venv "${VENV_DIR}" # activates the newly created virtual environment . "${VENV_DIR}"/bin/activate # prints activated version of Python python3 -V pip3 install --upgrade pip # Write here all Python libraries which you want to install over pip # An example or requirements.txt see here: # https://docs.python.org/3/tutorial/venv.html#managing-packages-with-pip pip3 install -r "${PROJECT_DIR}"/requirements.txt echo "Virtual environment ${VENV_DIR} has been created" deactivate 

Luego ejecuta este script en la consola:

 $ bash /home/user/path/to/create_venv.sh 

Puede ir a la carpeta donde existe su venv y hacer clic derecho -> git bash here. Luego, simplemente python -m pip install ipython y se instalará dentro de la carpeta.

Lo encuentro aún más conveniente con el paquete virtualenv que crea el venv dentro de la carpeta del proyecto.

Compartiendo lo que me ha funcionado tanto en Ubuntu como en Windows. Esto es para python3. Para hacer para python2, reemplaza “3” con “2”:

Ubuntu

 pip install virtualenv --user virtualenv -p python3 /tmp/VIRTUAL source /tmp/VIRTUAL/bin/activate which python3 

Para instalar cualquier paquete: pip install package

Para salir del entorno virtual: deactivate

Para activar de nuevo: source /tmp/VIRTUAL/bin/activate

Explicación completa aquí .

Windows

(Suponiendo que tiene MiniConda instalado y se encuentra en el Menú Inicio> Anaconda> Terminal Anaconda)

 conda create -n VIRTUAL python=3 activate VIRTUAL 

Para instalar cualquier paquete: pip install package o conda install package

Para salir del entorno virtual: deactivate

Para activar de nuevo: activate VIRTUAL

Explicación completa aquí .

Compartiendo un caso personal si ayuda. Es que un entorno virtual fue arreglado previamente. Su ruta puede ser mostrada por

echo $VIRTUAL_ENV

Asegúrese de que se pueda escribir en el usuario actual. Si no, usando

sudo ipython

Ciertamente borraría el mensaje de advertencia.

En anaconda, si $ VIRTUAL_ENV se organiza de forma independiente, uno puede simplemente eliminar esta carpeta o cambiar su nombre, y luego reiniciar el shell. Anaconda recuperará su configuración por defecto.