Usar pip3
para instalar un paquete en a virtualenv
hace 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 $PATH
variable en .bash_profile
; agregó la siguiente línea:
export PATH=/usr/local/bin:$PATH
Correr which python3
regresa /usr/local/bin/python3
(después de reiniciar el shell).
Nota: which python3
todavía regresa / usr/bin/python
aunque.
Instalado virtualenv
usando pip3
:
pip3 install virtualenv
A continuación, cree uno nuevo virtualenv
y 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 pip
y which pip3
ambos 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.
fuente
pip3
?). Puede que no sea malo por sí mismo, pero debe saber si lo es.Respuestas:
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/pip
ybin/activate
. Enbin/pip
, mira el shebang. ¿Es correcto? Si no es así, corríjalo. Luego, en línea ~42
en subin/activate
, verifique si su ruta virtualenv es correcta. Se verá algo como estoSi 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 pip
repitiendo una y otra vez, siguiendo el seguimiento de la pila, etc.Asegúrate absolutamente de que
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,
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
fuente
#!/usr/local/bin/python3.3
lugar 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.activate
guión estaba bien, pero cuidado , todos lospip*
guiones y loseasy_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
--relocatable
mi env, y la línea 42 es incorrecta. Parece--relocatable
que no lo hizo bien.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!
fuente
Tuve el mismo problema, lo resolví eliminando el directorio venv y volviéndolo a crear.
Ahora todo funciona a las mil maravillas.
fuente
pip3
mientras virtualenv, por defecto, usaba python2 usando enpip
lugar depip3
. Revisé elbin
para encontrar nopip3
. Usandovirtualenv -p python3 venv
resuelto el problema.Yo tuve este problema también. Llamar
pip install <package_name>
desde el/bin
directorio 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 contienepip
. Extraño. Esto no sucede en CentOS. Para mí, la solución fue llamar enpip3
lugar depip
. Cuando había instalado PIP dentro del entorno virtual a través de ez_setup , tres ejecutables "PIP" se habían instalado en el/bin
directorio -pip
,pip3
ypip3.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. Llamarpip
con 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.fuente
Lo primero que debe verificar es a qué ubicación se está resolviendo pip:
si está en un virtualenv, esperaría que esto le diera algo como:
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):
Para resolver esto, verifique su pipconfig en:
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)
fuente
/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.which pip
todavía me estaba dando la ruta correcta!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:
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"
fuente
Me encontré con el mismo problema al ejecutar Manjaro. Creé el entorno virtual usando
python3 -m ven venv
y luego lo activé usandosource venv/bin/actiave
.which python
ywhich pip
ambos 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 consudo 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.fuente
python-pip
travé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.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.fuente
[install]\nprefix=
Vaya al directorio bin en su entorno virtual y escriba así:
fuente
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
.La eliminación de los alias y la recreación del entorno virtual utilizando
python3 -m venv venv
solucionó el problema.fuente
Encontré el mismo problema hoy. Simplemente reinstalé pip globalmente con
sudo easy_install pip
(OSX / Max), luego creé mi virtualenv nuevamente consudo virtualenv nameOfVEnv
. Luego, después de activar el nuevo virtualenv, elpip
comando funcionó como se esperaba.No creo que lo usé
sudo
en la primera creación de virtualenv y esa puede haber sido la razón por la que nopip
tuve acceso desde dentro de virtualenv, pude accederpip2
antes de esta solución, lo cual fue extraño.fuente
virtualenv
ejecutarlo nuevamenteA continuación, se muestran algunas prácticas que podrían evitarle dolores de cabeza al utilizar entornos virtuales:
Para una mejor representación de estas prácticas, aquí hay una simulación:
creando una carpeta para sus proyectos / entornos
creando ambiente
entorno de activación
instalando paquetes
paquete disponible dentro del medio ambiente
desactivar el entorno
paquete NO DISPONIBLE fuera del medio ambiente
Notas:
¿Por qué no sudo?
Si cambia el nombre de la carpeta de su proyecto (como se menciona en la respuesta aceptada) ...
fuente
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.
fuente
Este problema ocurre cuando se crea una instancia virtualenv y luego se cambia el nombre de la carpeta principal.
fuente
Ninguna de las soluciones anteriores funcionó para mí.
Mi venv estaba activo.
pip -V
ywhich pip
me dio la ruta virtualenv correcta, pero cuandopip install
-ed paquetes con venv activado, mipip freeze
permanecía vacío.Todas las variables del entorno también eran correctas.
Finalmente, acabo de cambiar pip y eliminé virtualenv:
Reinstale venv:
Crear venv:
Y todos los paquetes se instalaron correctamente en mi venv nuevamente.
fuente
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
fuente
Yo tuve este problema también. La llamada
sudo pip install
hizo que los paquetes de Python se instalaran en el directorio global de paquetes del sitio y la llamadapip install
simplemente funcionó bien. Entonces no use sudo en virtualenv.fuente
sudo su
seguido de<venv>/bin/activate
seguido depip install
.El mismo problema. Python3.5 y pip 8.0.2 instalados desde Linux
rpm
.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.
pyvenv
con--system-site-packages
./bin
no contienepip
,pip
está disponible en los paquetes del sitio del sistemapyvenv
sin--system-site-packages
pip
se instala en./bin
, pero es una versión diferente (deensurepip
)Solución obvia para
pyvenv
con--system-site-packages
:--system-site-packages
opcióninclude-system-site-packages = false
atrue
enpyvenv.cfg
archivofuente
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.
fuente
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.
fuente
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.
Oh, mierda, me olvidé de grabar
projects
antes de crear el virtualenv y clonar el representante. Bueno, soy demasiado vago para destruir y recrear. Moveré el directorio sin problemas.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.
fuente
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_profile
lo que ya debería estar configurado para regresar a su estado original pyenv / pyenv-virtualenv.fuente
Me pasó cuando instalé virtualenv con
--python=python3.6
flag pero luego intenté usarpip2 install
.Crear virtualenv con el indicador de la versión que usará resuelve problemas de permisos. Para comprobarlo, tratar
which pip
owhich pip2
owhich pip3
(depende de su elección). Si alguno de lospip
que usa muestra la ruta novenv
aquí, es su problema.fuente
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ó
fuente
Tuve este problema y, después de probar toda la solución anterior, eliminé todo y comencé de nuevo.
En mi propio caso, utilicé
sudo
para 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ó!
fuente
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.
fuente
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!
fuente
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.
fuente
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):
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
Además, si instala usando conda, puede instalar sin activar:
fuente
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 -V
muestra el camino de virtualenv a pipfuente