pip instalando en paquetes de sitios globales en lugar de virtualenv


98

Usar pip3para instalar un paquete en a virtualenvhace que el paquete se instale en la carpeta global site-packages en lugar de en la carpeta virtualenv. Así es como configuré 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 $PATHvariable en .bash_profile; agregó la siguiente línea:

export PATH=/usr/local/bin:$PATH

Correr which python3regresa /usr/local/bin/python3(después de reiniciar el shell).

Nota: which python3todavía regresa / usr/bin/pythonaunque.

Instalado virtualenvusando pip3:

pip3 install virtualenv

A continuación, cree uno nuevo virtualenvy actívelo:

virtualenv testpy3 -p python3
cd testpy3
source bin/activate

Nota: si no especifico -p python3, pip faltará en la carpeta bin en virtualenv.

Ejecutando which pipy which pip3ambos devuelven la carpeta virtualenv:

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

Ahora, cuando intento instalar, por ejemplo, Markdown usando pip en el virtualenv activado, pip se instalará en la carpeta global site-packages en lugar de en la carpeta site-packages del virtualenv.

pip install markdown

Devoluciones en ejecución pip list:

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 se puede ver, el mundial carpeta site-packages contiene Markdown, la carpeta virtualenv no.

Nota: Ya tenía Python2 y Python3 instalados antes en una VM diferente (seguí estos instrucciones) y tuve el mismo problema con Python3; Sin embargo, la instalación de paquetes en un virtualenv basado en Python2 funcionó a la perfección.

Cualquier consejo, sugerencia,… será muy apreciado.


pip no instala un paquete si ya está disponible. Debería ver "Requisito ya satisfecho" en su salida. Intente instalar un paquete que aún no tenga. por cierto, pip3 podría usar python3 no elaborado (¿cómo se instala pip3?). Puede que no sea malo por sí mismo, pero debe saber si lo es.
jfs

1
No tenía Markdown instalado antes. La lista global de paquetes estaba vacía. No importa qué paquete pruebe, puedo reproducir este comportamiento cada vez.
ƘɌỈSƬƠƑ

Respecto a pip3: este fue instalado por homebrew, junto con Python3.
ƘɌỈSƬƠƑ

Para mí, esto también ayudó: stackoverflow.com/questions/14695278/… Solo para FYI para otros
Nagaraj Tantri

Respuestas:


90

Es curioso que menciones esto, solo tuve exactamente el mismo problema. Lo resolví eventualmente, pero todavía no estoy seguro de qué lo causó.

Intente comprobar sus scripts bin/pipy bin/activate. En bin/pip, mira el shebang. ¿Es correcto? Si no es así, corríjalo. Luego, en línea ~ 42en su bin/activate, verifique si su ruta virtualenv es correcta. Se verá algo como esto

VIRTUAL_ENV="/Users/me/path/to/virtual/environment"

Si está mal, corríjalo deactivate, entonces . bin/activate, y si nuestro problema mutuo tuvo la misma causa, debería funcionar. Si aún no lo hace, de todos modos estás en el camino correcto. Pasé por la misma rutina de resolución de problemas que tú, which piprepitiendo una y otra vez, siguiendo el seguimiento de la pila, etc.

Asegúrate absolutamente 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 ejecutar varios virtualenvs al mismo tiempo).

Si nada de esto funciona, una solución temporal puede ser, como dijo Joe Holloway,

Simplemente ejecute el pip del virtualenv con su ruta completa (es decir, no confíe en buscar la ruta ejecutable) y ni siquiera necesita activar el entorno. Hará lo correcto.

Quizás no sea lo ideal, pero debería funcionar en caso de apuro.

Enlace a mi pregunta original:

VirtualEnv / Pip intentando instalar paquetes globalmente


1
Gracias Chase. Vine a tu pregunta antes de publicar la mía, pero parece que me salté la última línea que mencionaba el asunto. Y de hecho, se configuró en #!/usr/local/bin/python3.3lugar de #!/Users/kristof/VirtualEnvs/testpy3/bin/python3.3. Lo cambié, activé virtualenv e instalé el paquete Markdown. Pip ahora se instala en la carpeta virtualenv site-packages en lugar de en la global.
ƘɌỈSƬƠƑ

También me encontré con esto, muchas gracias por la respuesta. Me di cuenta de los shebangs e inmediatamente después encontré esta pregunta, confirmando mis sospechas. ¿Alguien sabe por qué el tinglado estaba mal? Sería bueno encontrar una solución permanente para que no tengamos que verificarlo cada vez que creamos un nuevo entorno virtual.
Will el

2
Yo tuve el mismo problema. Mi activateguión estaba bien, pero cuidado , todos los pip*guiones y los easy_install*guiones tienen el estilo equivocado. Todos deben arreglarse manualmente. No pude solucionarlos reinstalando pip ni nada de eso. Además, una aclaración a la solución alternativa de Joe Holloway: el problema no es que el shell busque pip, es el hecho de que pip especifica explícitamente el pitón incorrecto . Por lo tanto, necesitaría especificar el python usted mismo, así:$ ~/.virtualenvs/venv/bin/python ~/.virtualenvs/venv/bin/pip --version
Neil Traft

Me encontré con este problema después de --relocatablemi env, y la línea 42 es incorrecta. Parece --relocatableque no lo hizo bien.
shellbye

4
Esto me sucedió cuando cambié el nombre de un directorio intermedio, así que tuve que editar los scripts de activación y pip en '/ bin'
joarleymoraes

16

Para mí, esto no fue un problema de pip o virtualenv. Fue un problema de pitón. Había configurado mi $ PYTHONPATH manualmente en ~ / .bash_profile (o ~ / .bashrc) después de seguir algún tutorial en línea. Este $ PYTHONPATH configurado manualmente estaba disponible en virtualenv ya que probablemente debería estar permitido.

Además add2virtualenv, no estaba agregando la ruta de mi proyecto a mi $ PYTHONPATH por alguna razón dentro del virtualenv.

¡Solo algunos caminos que se bifurcan para aquellos que aún podrían estar estancados! ¡Salud!


11

Tuve el mismo problema, lo resolví eliminando el directorio venv y volviéndolo a crear.

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 a las mil maravillas.


Estaba usando pip3mientras virtualenv, por defecto, usaba python2 usando en piplugar de pip3. Revisé el binpara encontrar no pip3. Usando virtualenv -p python3 venvresuelto el problema.
Subtleseeker

Esto resolvió mi problema. La creación automática de virtualenv de Pycharm no funcionaba correctamente. La instalación manual hizo el truco. Gracias.
Loader el

5

Yo tuve este problema también. Llamar pip install <package_name>desde el /bindirectorio dentro de mi entorno virtual Python 3.3 en mi Mac Mavericks hizo que el paquete Python se instalara en el directorio de paquetes del sitio global Python 2.7. Esto fue a pesar del hecho de que mi $ PATH comenzó con el directorio que contiene pip. Extraño. Esto no sucede en CentOS. Para mí, la solución fue llamar en pip3lugar de pip. Cuando había instalado PIP dentro del entorno virtual a través de ez_setup , tres ejecutables "PIP" se habían instalado en el /bindirectorio - pip, pip3y pip3.3. Curiosamente, los tres archivos eran exactamente iguales. Vocaciónpip3 install <package_name>hizo que el paquete de Python se instalara correctamente en el directorio de paquetes del sitio local. Llamar pipcon el nombre de ruta completo al entorno virtual también funcionó correctamente. Me interesaría saber por qué mi Mac no está usando $ PATH de la manera que esperaba.


5

Lo primero que debe verificar es a qué ubicación se está resolviendo pip:

which pip

si está en un virtualenv, esperaría que esto le diera algo como:

/path/to/virtualenv/.name_of_virtualenv/bin/pip

Sin embargo, puede darse el caso de que se esté resolviendo el pip de su sistema por alguna razón. 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, verifique su pipconfig en:

~/.pipconf
~/.conf/pip
/etc/pip.conf

y asegúrese de que no haya nada que esté coaccionando su ruta de Python o su ruta de pip (esto lo solucionó para mí).

Luego intente iniciar una nueva terminal y reconstruya su virtualenv (elimínelo y luego créelo nuevamente)


2
/etc/pip.conf¡ Compruebe también ! Tuve un problema similar y después de mucha depuración pensé que alguien configuró mal el sistema en el que estaba trabajando al jugar con este archivo.
t.animal

Estoy usando arch Linux. Creo que el sistema operativo configura /etc/pip.conf.
Q. Qiao

¡Gracias! ¡Salvaste mi día! Esas configuraciones eran como fantasmas ocultos en el sistema de archivos
MewX

2
Tenía un alias definido de sesión terminal que anulaba pip, ¡por algunas razones which piptodavía me estaba dando la ruta correcta!
Matteo

4

Me encontré 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 dentro del virtualenv, estaba (por costumbre en Ubuntu), haciendo:

sudo easy_install -Z <package>

Esto hizo que el shebang bin / pip fuera ignorado y usó el python no virtualenv de la raíz para instalarlo en los paquetes globales del sitio. Como tenemos un entorno virtual, deberíamos instalar el paquete sin "sudo"


4

Me encontré con el mismo problema al ejecutar Manjaro. Creé el entorno virtual usando python3 -m ven venvy luego lo activé usando source venv/bin/actiave. which pythony which pipambos apuntaron hacia los binarios correctos en virtualenv, sin embargo, no pude instalar en virtualenv, incluso cuando usé la ruta completa de los binarios. Resultó que cuando desinstalé el paquete python-pip con sudo pacman -R python-pip python-reportlab(tenía que incluir reportlab para satisfacer las dependencias) todo comenzó a funcionar como se esperaba. No estoy seguro de por qué, pero probablemente se deba a una instalación doble en la que el paquete del sistema tiene prioridad.


También tuve este problema en Manjaro y lo resolví de la misma manera. Después de resolver, reinstalé a python-piptravés de pamac y el pip virtualenv continuó funcionando correctamente. No estoy seguro exactamente de lo que está pasando, pero estoy de acuerdo con su evaluación de un problema de instalación doble.
sid

3

Tuve un problema similar después de actualizar a pip==8.0.0 . Tuve que recurrir a depurar pip para rastrear el mal camino.

Como resultado, mi directorio de perfil tenía un archivo de configuración distutils con algunos valores de ruta vacíos. Esto estaba causando 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 se tope con este mismo problema, simplemente eliminar el archivo ~/.pydistutils.cfg(o eliminar la ruta de configuración vacía) solucionó el problema en mi entorno porque pip volvió a la configuración distribuida predeterminada.


1
Este también es mi problema. Mi archivo se veía así, ni idea de cómo llegó allí:[install]\nprefix=
foslock

1
@foslock sí, así era el mío también. malas noticias jaja!
Josiah Ruddell

3

Vaya al directorio bin en su entorno virtual y escriba así:

./pip3 install <package-name>

3

Tuve el mismo problema en macos con python 2 y 3 instalados.

Además, tenía alias para apuntar a python3 y pip3 en mi .bash_profile.

alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3

La eliminación de los alias y la recreación del entorno virtual utilizando python3 -m venv venvsolucionó el problema.


La instalación de macos python es innecesariamente dolorosa en mi humilde opinión
iomv

Estaba tirando de mi cabello, y esto es lo que finalmente me arregló las cosas: "qué pip" reveló el problema, "unalias pip" lo solucionó.
Colin

1

Encontré 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 pipcomando funcionó como se esperaba.

No creo que lo usé sudoen la primera creación de virtualenv y esa puede haber sido la razón por la que no piptuve acceso desde dentro de virtualenv, pude acceder pip2antes de esta solución, lo cual fue extraño.


Recibí esto porque moví el directorio a otra ruta y necesitaba virtualenvejecutarlo nuevamente
citynorman

1

A continuación, se muestran algunas prácticas que podrían evitarle dolores de cabeza al utilizar entornos virtuales:

  • Crea una carpeta para tus proyectos.
  • Cree sus 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 la carpeta de su 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 de activación

$ 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 medio ambiente

(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 medio ambiente

(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 de 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 medio ambiente.

Si cambia el nombre de la carpeta de su proyecto (como se menciona en la respuesta aceptada) ...

... tendrás que ajustar algunas variables de algunos archivos dentro del contenedor directorio de tu proyecto.

Por ejemplo:

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

bin / activar, línea 42 (VIRTUAL_ENV)


1

Tuve este problema. Resultó que había un espacio en uno de mis nombres de carpeta que causó el problema. Eliminé el espacio, eliminé y reinicié usando venv, y todo estuvo bien.


1

Este problema ocurre cuando se crea una instancia virtualenv y luego se cambia el nombre de la carpeta principal.


1

Ninguna de las soluciones anteriores funcionó para mí.

Mi venv estaba activo. pip -Vy which pipme dio la ruta virtualenv correcta, pero cuando pip install-ed paquetes con venv activado, mi pip freezepermanecía vacío.

Todas las variables del entorno también eran correctas.

Finalmente, acabo de cambiar pip y eliminé virtualenv:

easy_install pip==7.0.2

pip install pip==10

sudo pip uninstall virtualenv

Reinstale venv:

sudo pip install virtualenv

Crear venv:

python -m virtualenv venv_name_here

Y todos los paquetes se instalaron correctamente en mi venv nuevamente.


1

Después de crear un entorno virtual, intente usar pip ubicado en suVirtualEnvName \ Scripts

Debería instalar un paquete dentro de Lib \ site-packages en su entorno virtual


0

Yo tuve este problema también. La llamada sudo pip installhizo que los paquetes de Python se instalaran en el directorio global de paquetes del sitio y la llamada pip installsimplemente funcionó bien. Entonces no use sudo en virtualenv.


O si usa sudo, también debe activar el entorno virtual. sudo suseguido de <venv>/bin/activateseguido de pip install.
Dave

0

El mismo problema. Python3.5 y pip 8.0.2 instalados desde Linuxrpm .

No encontré una causa principal y no puedo dar una respuesta adecuada. Parece que hay varias causas posibles.

Sin embargo, espero poder ayudar a compartir mi observación y una solución.

  1. pyvenv con --system-site-packages

    • ./binno contiene pip, pipestá disponible en los paquetes del sitio del sistema
    • los paquetes se instalan globalmente ( ¿ERROR? )
  2. pyvenv sin --system-site-packages

    • pipse instala en ./bin, pero es una versión diferente (de ensurepip)
    • los paquetes se instalan dentro del entorno virtual ( OK )

Solución obvia para pyvenvcon --system-site-packages:

  • créalo sin el --system-site-packages opción
  • cambiar include-system-site-packages = falsea trueen pyvenv.cfgarchivo

0

También vale la pena verificar que no modificó de alguna manera la ruta a su virtualenv.

En ese caso, la primera línea 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 de nuevo virtualenv.


0

Para Python 3ers

Intente actualizar. Tuve exactamente el mismo problema e intenté la respuesta de Chases, sin embargo, 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 actualizado a 3.5.2. Pyvenv una vez más funciona.


0

Esto me sucedió cuando creé el virtualenv en la ubicación incorrecta. Entonces pensé que podrí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 grabar projectsantes de crear el virtualenv y clonar el representante. Bueno, soy demasiado vago para destruir y recrear. 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 LEJOS! Luego instaló los paquetes en una ubicación global.

La lección que aprendí fue, simplemente elimine el directorio virtualenv. No lo muevas.


0

Tuve este problema después de instalar Divio: había cambiado mi PATH o entorno de alguna manera, ya que lanza una terminal.

La solución en este caso fue simplemente hacer source ~/.bash_profilelo que ya debería estar configurado para regresar a su estado original pyenv / pyenv-virtualenv.


0

Me pasó cuando instalé virtualenv con --python=python3.6flag pero luego intenté usar pip2 install.
Crear virtualenv con el indicador de la versión que usará resuelve problemas de permisos. Para comprobarlo, tratar which pipo which pip2o which pip3(depende de su elección). Si alguno de los pipque usa muestra la ruta no venvaquí, es su problema.


0

De alguna manera un archivo setup.cfg con un prefijo = "" en la carpeta del proyecto

ejecutar pip install en el virtualenv fuera de la carpeta del proyecto funcionó, por lo que desde adentro le estaba diciendo a pip que usara un prefijo vacío que por defecto es "/"

quitar el archivo lo arregló


0

Tuve este problema y, después de probar toda la solución anterior, eliminé todo y comencé de nuevo.

En mi propio caso, utilicé sudopara crear una de las carpetas en las que existía el entorno virtual, y sudo le otorgo los privilegios a la raíz

¡Estaba muy enojado! ¡Pero funcionó!


0

Tengo que usar 'sudo' para instalar paquetes a través de pip en mi sistema ubuntu por alguna razón. Esto está provocando que los paquetes se instalen en paquetes de sitio globales. Poniendo esto aquí para cualquiera que pueda enfrentar este problema en el futuro.


0

Tenía exactamente el problema del título y lo resolví. Pip comenzó a instalarse en los paquetes del sitio de venv después de que limpié mi PATH: tenía una ruta a mi directorio local ~ / bin al principio.

Por lo tanto, mi consejo: compruebe minuciosamente las variables de entorno en busca de "basura" o cualquier cosa no estándar. Desafortunadamente, virtualenv puede ser sensible a esos.

¡Buena suerte!


0

La respuesta corta es ejecutar Command virtualenv con el parámetro “—no-site-packages”.

Respuesta larga con explicación: -

Entonces, después de correr aquí y allá, y pasar por muchos hilos, encontré el problema. Las respuestas anteriores han dado la idea, pero me gustaría volver a repasar todo.

  • El problema es que incluso si estás activando el entorno, se está refiriendo al entorno del sistema debido a la forma en que hemos creado el virtualenv.

  • cuando ejecutamos el comando virtualenv env -p python3 , instalará virtualenv pero no creará no-global — site-packages.txt.

  • Por eso, cuando activa el entorno mediante el comando de activación de la fuente, este archivo llamado site.py (el nombre puede ser diferente, simplemente lo olvidé) que se ejecuta y verifica si este archivo no está presente, no agregará su ruta de env a sys.path y usa los sistemas python.

  • para solucionar este problema, simplemente ejecute virtualenv con un parámetro adicional, no-site-packages, creará ese archivo y cuando active el entorno, agregará su ruta de entorno personalizada en su variable PATH para que sea accesible.


0

Mucha buena discusión arriba, pero se usaron ejemplos virtualenv. Dado que 'conda' es ahora la herramienta recomendada para administrar virtualenv, he resumido los pasos para ejecutar pip en conda env de la siguiente manera.

Usaré py36r como el nombre del env, y / opt / conda / envs es el prefijo de los envs):

$ source /opt/conda/etc/profile.d/conda.sh # skip if already done 
$ conda activate py36r
$ pip  install pkg_xyz
$ pip  list | grep pkg_xyz

Tenga en cuenta que el pip ejecutado debe estar en /opt/conda/envs/py36r/bin/pip(no /opt/conda/bin/pip).

Alternativamente, puede simplemente ejecutar lo siguiente sin activar conda

$ /opt/conda/envs/py36r/bin/pip

Además, si instala usando conda, puede instalar sin activar:

$ conda install -n py36r pkg_abc ...

0

VENTANAS

Para mí, la solución no fue usar mkvirtualenv, sino:

python -m venv path/to/your/virtualenv

workon funciona correctamente.

while in virtualenv: pip -Vmuestra el camino de virtualenv a pip

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.