python - entorno - instalación de pip en paquetes de sitio globales en lugar de virtualenv
virtualenv python 3 windows (18)
El uso de pip para instalar un paquete en virtualenv hace que el paquete se instale en la carpeta global de paquetes de sitio en lugar de en la carpeta virtualenv. Así es cómo configuro Python3 y virtualenv en OS X Mavericks (10.9.1):
Instalé python3 usando Homebrew:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install python3 --with-brewed-openssl
Cambió la variable $PATH
en .bash_profile; agregué la siguiente línea:
export PATH=/usr/local/bin:$PATH
Ejecutando which python3
devuelve /usr/local/bin/python3
(después de reiniciar el shell).
Nota: which python3
todavía devuelve / usr/bin/python
.
Virtualenv instalado usando pip3:
pip3 install virtualenv
A continuación, cree un nuevo virtualenv y actívelo:
virtualenv testpy3 -p python3
cd testpy3
source bin/activate
Nota: si no especifico -p python3, la pip faltará de la carpeta bin en el virtualenv.
Ejecutando which pip
y which pip3
ambos devuelven la carpeta virtualenv:
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
Ahora, cuando trato de instalar, por ejemplo, Markdown usando pip en el virtualenv activado, pip se instalará en la carpeta global de paquetes de sitio en lugar de en la carpeta de paquetes de sitio de virtualenv.
pip install markdown
La ejecución de la pip list
vuelve:
Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)
Contenido de /Users/kristof/VirtualEnvs/testpy3/lib/python3.3/site-packages
:
__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/
Contenido de /usr/local/lib/python3.3/site-packages
:
Markdown-2.3.1-py3.3.egg-info/
__pycache__/
easy-install.pth
markdown/
pip-1.4.1-py3.3.egg/
setuptools-2.0.1-py3.3.egg
setuptools.pth
virtualenv-1.11-py3.3.egg-info/
virtualenv.py
virtualenv_support/
Como puede ver, la carpeta global de paquetes de sitio contiene Markdown, la carpeta virtualenv no.
Nota: antes tenía Python2 y Python3 instalados en una VM diferente (seguí these instrucciones) y tuve el mismo problema con Python3; Sin embargo, la instalación de paquetes en Virtualenv basada en Python2 funcionó perfectamente.
Cualquier consejo, pista, ... sería muy apreciado.
El mismo problema. Python3.5 y pip 8.0.2 instalados desde las rpm
Linux.
No encontré una causa principal y no puedo dar una respuesta adecuada. Parece que hay múltiples causas posibles.
Sin embargo, espero poder ayudar a compartir mi observación y una solución alternativa.
pyvenv
con--system-site-packages
-
./bin
no contienepip
,pip
está disponible en los paquetes del sitio del sistema - los paquetes están instalados globalmente ( ¿ERROR? )
-
pyvenv
sin--system-site-packages
-
pip
se instala en./bin
, pero es una versión diferente (deensurepip
) - los paquetes se instalan dentro del entorno virtual ( OK )
-
pyvenv
obvia para pyvenv
con --system-site-packages
:
- crearlo sin la
--system-site-packages
- cambiar
include-system-site-packages = false
atrue
en el archivopyvenv.cfg
Es curioso que hayas mencionado esto, solo tuve exactamente el mismo problema. Finalmente lo resolví, pero aún no estoy seguro de qué lo causó.
Intente verificar su bin/pip
y bin/activate
scripts. En bin/pip
, mira el shebang. ¿Es correcto? Si no, corrígelo. Luego, en la línea ~ 42
en su bin/activate
, verifique si su camino virtualenv es correcto. Se verá algo como esto
VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
Si es incorrecto, corríjalo, deactivate
, luego . bin/activate
. bin/activate
, y si nuestro problema mutuo tuviera la misma causa, debería funcionar. Si aún no lo hace, estás en el camino correcto, de todos modos. Pasé por la misma rutina de resolución de problemas que tú, which pip
una y otra vez, siguiendo el seguimiento de la pila, etc.
Asegúrate de que
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
es lo que quiere, y no se refiere a otro proyecto de prueba con un nombre similar (tuve ese problema y no tengo idea de cómo comenzó. Mi sospecha es que ejecuto múltiples virtualenvs al mismo tiempo).
Si nada de esto funciona, una solución temporal puede ser, como dijo Joe Holloway,
Simplemente ejecute la pipa del virtualenv con su ruta completa (es decir, no confíe en buscar en la ruta ejecutable) y ni siquiera necesita activar el entorno. Hará lo correcto.
Tal vez no es ideal, pero debería funcionar en un apuro.
Enlace a mi pregunta original:
Estas son algunas prácticas que podrían evitar dolores de cabeza al usar entornos virtuales:
- Crea una carpeta para tus proyectos.
- Crea tus proyectos Virtualenv dentro de esta carpeta.
- Después de activar el entorno de su proyecto, nunca use " sudo pip install package ".
- Después de terminar su trabajo, siempre " desactive " su entorno.
- Evite cambiar el nombre de su carpeta de proyecto.
Para una mejor representación de estas prácticas, aquí hay una simulación:
creando una carpeta para sus proyectos / entornos
$ mkdir venv
creando ambiente
$ cd venv/
$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.
entorno activador
$ source google_drive/bin/activate
instalar 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 el entorno
(google_drive) $ deactivate
$
paquete NO DISPONIBLE fuera del entorno
(google_drive) $ 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 "<stdin>", line 1, in <module>
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 utiliza el paquete de instalación sudo pip , está ejecutando Virtualenv como root , escapando de todo el entorno que se creó y luego instalando el paquete en paquetes de sitio globales, y no dentro de la carpeta del proyecto donde tiene un entorno virtual, aunque han activado el ambiente.
Si cambia el nombre de la carpeta de su proyecto (como se menciona en la respuesta aceptada) ...
... 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 / activate, línea 42 (VIRTUAL_ENV)
Este problema se produce al crear una instancia de virtualenv y luego cambiar el nombre de la carpeta principal.
Esto me sucedió cuando creé el virtualenv en el lugar equivocado. Entonces pensé que podía mover el directorio a otra ubicación sin que importara. Importaba
mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]
Oh, mierda, me olvidé de editar projects
antes de crear el virtualenv y clonar el representante. Oh, bueno, soy demasiado vago para destruir y recrear. Simplemente moveré el directorio sin problemas.
cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements
No, quiere más permisos, ¿qué? ¡Pensé que era extraño, pero SUDO LE QUEDÓ! A continuación, instaló los paquetes en una ubicación global.
La lección que aprendí fue, simplemente elimine el directorio virtualenv. No lo muevas
Lo primero que debes comprobar es qué ubicación pip se está resolviendo:
which pip
si estás en un virtualenv, esperarías que esto te brinde algo como:
/path/to/virtualenv/.name_of_virtualenv/bin/pip
Sin embargo, es posible que se esté resolviendo en el pip de su sistema por algún motivo. Por ejemplo, puede ver esto desde dentro de su virtualenv (esto es malo):
/ usr / local / bin / pip (o cualquier cosa que no esté en su ruta virtualenv).
Para resolver esto, compruebe su pipconfig en:
~/.pipconf
~/.conf/pip
/etc/pip.conf
y asegúrate de que no haya nada que esté forzando tu ruta de Python o tu ruta de pip (esto me solucionó).
Luego intente iniciar un nuevo terminal y reconstruir su virtualenv (eliminar y luego crearlo de nuevo)
Me encuentro con el mismo problema al instalar un paquete de Python desde dentro de un virtualenv. La causa raíz en mi caso fue diferente. Desde el virtualenv, estaba (por costumbre en Ubuntu), haciendo:
sudo easy_install -Z <package>
Esto causó que se ignorara el shebang bin / pip y usó el python no virtualenv de la raíz para instalarlo en los paquetes de sitio globales. Como tenemos un entorno virtual, debemos instalar el paquete sin "sudo"
Ninguna de las soluciones anteriores funcionó para mí.
Mi venv estaba activo. pip -V
y which pip
me dio la ruta virtualenv correcta, pero cuando pip install
instalé paquetes -ed con venv activado, mi pip freeze
permaneció vacía.
Todas las variables de entorno también fueron correctas.
Finalmente, cambié pip y eliminé virtualenv:
easy_install pip==7.0.2
pip install pip==10
sudo pip uninstall virtualenv
Reinstalar venv:
sudo pip install virtualenv
Crear venv:
python -m virtualenv venv_name_here
Y todos los paquetes instalados correctamente en mi venv de nuevo.
Nos encontramos con el mismo problema hoy. Simplemente reinstalé pip globalmente con sudo easy_install pip
(OSX / Max), luego creé mi virtualenv nuevamente con sudo virtualenv nameOfVEnv
. Luego, después de activar el nuevo virtualenv, el comando pip
funcionó como se esperaba.
No creo que use sudo
en la primera creación virtualenv y que puede haber sido la razón para no tener acceso a pip
desde dentro del virtualenv, pude obtener acceso a pip2
antes de esta corrección, que era extraño.
Para mí, esto no fue un problema de pip o virtualenv. Fue un problema de pitón. Había establecido mi $ PYTHONPATH manualmente en ~ / .bash_profile (o ~ / .bashrc) después de seguir algún tutorial en línea. Esta $ PITHONPATH configurada manualmente estaba disponible en virtualenv, ya que probablemente debería permitirse.
Además add2virtualenv
no estaba agregando la ruta de mi proyecto a mi $ PYTHONPATH por algún motivo dentro del virtualenv.
¡Solo algunos caminos de bifurcación para aquellos que aún podrían estar atrapados! ¡Aclamaciones!
También tuve este problema. Llamar a pip install <package_name>
desde el directorio /bin
dentro de mi entorno virtual Python 3.3 en Mavericks Mac provocó que el paquete Python se instalara en el directorio de paquetes de sitios globales de Python 2.7. Esto fue a pesar de que mi $ PATH comenzó con el directorio que contiene pip
. Extraño. Esto no ocurre en CentOS. Para mí, la solución fue llamar pip3
lugar de pip
. Cuando instalé pip en el entorno virtual mediante ez_setup , se instalaron tres ejecutables "pip" en el directorio /bin
- pip
, pip3
y pip3.3
. Curiosamente, los tres archivos fueron exactamente iguales. Llamar a pip3 install <package_name>
hizo que el paquete de Python se instalara correctamente en el directorio local de paquetes de sitio. Llamar a pip
con la ruta de acceso completa en el entorno virtual también funcionó correctamente. Me interesaría saber por qué mi Mac no está usando $ PATH de la manera que yo esperaría.
También tuve este problema. Llamar a sudo pip install
provocó que los paquetes de Python se instalaran en el sitio global: los paquetes de los paquetes y la instalación de llamadas de pip install
funcionó bien. Así que no use sudo en virtualenv.
También vale la pena comprobar que no modificó de alguna manera el camino hacia su virtualenv.
En ese caso, la primera línea en bin/pip
(y el resto de los ejecutables) tendría una ruta incorrecta.
Puede editar estos archivos y corregir la ruta o eliminar e instalar nuevamente el virtualenv.
Tuve el mismo problema, lo resolví eliminando el directorio de venv y recreándolo.
deactivate (if venv is activated first deactivate it)
rm -rf venv
virtualenv -p python3 venv
. ENV/bin/activate
pip3 install -r requirements.txt
Ahora todo funciona como un encanto.
Tuve este problema Resultó que había un espacio en uno de los nombres de mi carpeta que causó el problema. Eliminé el espacio, lo eliminé y volví a instalar usando venv, y todo estuvo bien.
Tuve este problema después de instalar Divio: había cambiado mi PATH o mi entorno de alguna manera, ya que lanza una terminal.
La solución en este caso fue solo hacer source ~/.bash_profile
que ya debería estar configurado para regresar a su estado original pyenv / pyenv-virtualenv.
Tuve un problema similar después de actualizar a pip==8.0.0
. Tuve que recurrir a la depuración de pip para rastrear el mal camino.
Resultó que mi directorio de perfil tenía un archivo de configuración de distutils con algunos valores de ruta vacíos. Esto causaba que todos los paquetes se instalaran en el mismo directorio raíz en lugar del entorno virtual apropiado (en mi caso /lib/site-packages
).
No estoy seguro de cómo llegó el archivo de configuración o cómo tenía valores vacíos, pero comenzó después de actualizar pip.
En caso de que alguien más tropiece con este mismo problema, simplemente eliminando el archivo ~/.pydistutils.cfg
(o eliminando la ruta de configuración vacía) solucionó el problema en mi entorno porque pip volvió a la configuración distribuida predeterminada.
Para Python 3ers
Intenta actualizar Tuve exactamente el mismo problema e intenté la respuesta de Chases, pero no tuve éxito. La forma más rápida de refactorizar esto es actualizar su versión de Python Minor / Patch si es posible. Noté que estaba ejecutando 3.5.1 y actualicé a 3.5.2. Pyvenv una vez más funciona.