virtualenv no incluye pip

Estoy tratando de crear un entorno virtual usando virtualenv en Mac OS X El Capitan. He instalado Python 2.7.11 con brew , que incluye pip , wheel y setuptools de forma predeterminada.

Hovewer, cuando trato de instalar virtualenv siguiendo las instrucciones en la documentación o de cualquier otro recurso, tengo varios problemas:

  1. virtualenv ejecutable virtualenv no se coloca en /usr/local/bin después de que pip haga su trabajo, así que necesito hacerlo de forma manual (puede indicar que hay algo mal con la instalación en este paso).
  2. Después de ejecutar virtualenv venv , crea un nuevo entorno, detecta Python 2.7.11 de brew -installation, pero: no hay pip dentro de la carpeta bin . Eso significa que, si bash which pip , habiendo activado venv , devuelve una posición global de pip/usr/local/bin/pip , no /path/to/venv/bin/pip .

Como consecuencia, la instalación de paquetes dentro de venv usa un pip global y los instala en un sites-packages global sites-packages , no dentro de venv , y es todo lo contrario a lo que debería hacer el entorno.

¿Podría por favor sugerir qué puede estar mal y cómo solucionarlo?

EDITAR: Lo que hay que mencionar es que solía tener otras versiones de Python instaladas en mi computadora, que recientemente eliminé como se describe en esta respuesta . Tal vez causa el problema, y ​​se necesita un poco más de limpieza a fondo.

Intente eliminar o renombrar el archivo .pydistutils.cfg en su directorio de inicio, por ejemplo, renombrando con mv ~/.pydistutils.cfg ~/oldpydistutils.cfg

Estoy poniendo una respuesta detallada aquí para ayudar a otros, pero el crédito original va a esta respuesta . Si sabes lo que específicamente estaba causando el problema en .pydistutils.cfg, ¡avísame!

Tenía el mismo problema: mis entornos virtuales se crearon sin una copia local de pip, aunque tenían una copia local de python. Esto significaba que el uso de $ pip desde el entorno virtual instalado en la ubicación del paquete global, y no era visible para la python del entorno.

Cómo diagnosticé esto en mi máquina:

  1. Creo un entorno virtual con $ virtualenv env
  2. Activado el entorno virtual con $ source env/bin/activate
  3. Ubicación de Python verificada: ejecute (env)$ which python con output /Users//env/bin/python (como se esperaba)
  4. Localización de pip verificada: ejecutar (env)$ which pip con output /usr/local/bin/pip (NO se espera)

Para verificar a dónde van nuestros paquetes, podemos intentar instalar un paquete en el entorno virtual:

  1. Intente instalar un paquete: (env)$ pip install HTTPServer que tiene éxito
  2. Intente ejecutar el paquete: (env)$ python -m HTTPServer que falla con error /Users/emunsing/env/bin/python: No module named HTTPServer
  3. Para volver a verificar, intente instalar de nuevo: (env)$ pip install HTTPServer que produce el Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages

Haciendo una doble comprobación, vemos que no hay Pip en la carpeta / bin del entorno:

$ ls env/bin activate activate.fish python python2 activate.csh activate_this.py python-config python2.7

Y así, mientras el sistema encuentra la versión local de python, no puede encontrar un pip local para usar y atraviesa el $ PATH. Terminó usando pip de / usr / local / bin, y no pude instalar paquetes localmente en el entorno virtual.

Esto es lo que intenté: – Reinstalar python brew uninstall python seguido de brew upgrade y brew install python --build-from-source – Instalar pip usando el comando get-pip.py como se describe en la documentación de Pip

Esto es lo que descarté: no estaba usando sudo pip ... que causó problemas similares en esta otra pregunta y no lo he hecho en ningún momento en esta instalación de Python / pip. Mi entorno virtual no mostró una instalación local de pip, como fue el caso en estas preguntas similares: Esta para Windows , Esta para Mac OS X.

En última instancia, encontré que al eliminar el archivo ~/.pydistutils.cfg solucionó el problema, permitiendo nuevos entornos virtuales que tenían su propio pip local. Los contenidos de mi archivo ~/.pydistutils.cfg fueron:

 [global] verbose=1 [install] install-scripts=$HOME/bin [easy_install] install-scripts=$HOME/bin 

Simplemente cambiar el nombre del archivo ~/.pydistutils.cfg parece solucionar el problema: parece que aunque este archivo fue creado por la instalación de homebrew, algunas configuraciones en este archivo pueden ser incompatibles con virtualenv . Si bien la eliminación de este archivo no ha tenido efectos negativos en mi sistema, es posible que deba usar el indicador --user al instalar paquetes con pip en el entorno global (por ejemplo, $ pip install --user HTTPServer ). Aquí hay más detalles sobre .pydistutils.cfg si desea trabajar para adaptarlo a sus necesidades.

Tuve el problema al ejecutar virtualenv: “ImportError: No hay un módulo llamado pip”. Mi solución fue degradar virtualenv. Tenía 16.2.0. pip desinstala virtualenv pip instala virtualenv == 15.1.0

  1. virtualenv ejecutable virtualenv no se coloca en /usr/local/bin después de que pip haga su trabajo, así que necesito hacerlo de forma manual (puede indicar que hay algo mal con la instalación en este paso).

No hagas eso Eso solo ocultará el error y no resolverá el problema. Aquí hay una breve guía sobre cómo depurar este tipo de problemas:

  • Empieza con which -a python . La primera ruta que vea debe ser /usr/local/bin/python , si no, verifique su variable PATH .

  • A continuación, compruebe which -a pip . De nuevo, el primer camino debe ser /usr/local/bin/pip . Si no es así, ejecute python -m ensurepip y vuelva a python -m ensurepip .

  • Ahora instale virtualenv usando pip install virtualenv , luego verifique la salida de la which -a virtualenv . La primera ruta debe ser /usr/local/bin/virtualenv , de lo contrario, compruebe la salida de env |grep PYTHON busca de variables de entorno inesperadas.

  • Finalmente, compruebe la salida de virtualenv --version para asegurarse de que tiene la última versión.