Python Virtualenv: ningún módulo llamado virtualenvwrapper.hook_loader


79

Estoy ejecutando Mac OS 10.6.8. y quería instalar además de python 2.6 también python 2.7 y usar python 2.7 en un nuevo virtualenv. Ejecuté los siguientes pasos:

Descargué Python 2.7 y lo instalé:

http://www.python.org/ftp/python/2.7.3/python-2.7.3-macosx10.6.dmg

Luego ejecuto el comando para configurar un nuevo virtualenv usando python2.7:

mkvirtualenv --python=python2.7 mynewenv

Mi .bash_profile tiene el siguiente aspecto:

# needed for virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh


# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

Ahora, cuando abro la consola, aparece el siguiente mensaje de error.

ImportError: No module named virtualenvwrapper.hook_loader
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python and that PATH is set properly.

También encontré en una publicación diferente que debería actualizar virtualenvwrapper. Eso no ayudó.

sudo pip install virtualenvwrapper --upgrade

Cualquier ayuda sería apreciada.


4
¿Viste esto o podrías intentarlo de otra maneraeasy_install
Admira el

Gracias miré la publicación. Pero no puedo instalar virtualenv para python 2.7. El mensaje es que virtualenv ya está instalado para 2.6. He ejecutado los siguientes comandos: ~ TK $ which python /Library/Frameworks/Python.framework/Versions/2.7/bin/python ~ TK $ sudo pip install virtualenv Requisito ya satisfecho (use --upgrade para actualizar): virtualenv en / Library / Python / 2.6 / site-packages / virtualenv-1.6-py2.6.egg Limpiando ...
Thomas Kremmel

Acabo de ver el estado de un virtualenv y no parece que sea compatible con Py 2.7.
martineau

2
Solo una nota: encontré este problema en un caso diferente. Comencé a hacer un virtualenv vía mkvirtualenvy luego lo detuve (con Ctrl+C). Al intentar hacer el virtualenv nuevamente, quedaron algunas sobras de la última vez. Entré en mi carpeta envs y eliminé el entorno construido de forma incompleta. Después de eso, el mismo mkvirtualenvcomando funcionó correctamente.
driftcatcher

2
El comentario de Yibo Yang también fue acertado para mi instalación de Ubuntu. Solo tenga cuidado con la ortografía ... lo anterior debe exportarse VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 con la "v" en VIRTUALENVWRAPPER
Kevin

Respuestas:


53

El problema se resolvió siguiendo los pasos a continuación:

#switch the /usr/bin/python link to point to current python link
cd /usr/bin
sudo mv python python.bak
sudo ln -s /Library/Frameworks/Python.framework/Versions/Current/bin/python python

Reorganice el comando de exportación para que se coloque antes de los comandos virtualenv en mi archivo .bash_profile:

PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH
export PATH

# needed for virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

Vuelva a instalar las herramientas de configuración, fácil instalación y PIP. Obviamente, esto es necesario para que funcionen correctamente con la nueva versión de Python:

sudo sh setuptools-0.6c11-py2.7.egg

sudo easy_install-2.7 pip

pip install virtualenv

1
Gracias, después de actualizar mi instalación de Python 2.7 en Mac Mountain Lion, tuve el mismo problema y esto lo solucionó.
A. Jesse Jiryu Davis

3
En Mountain Lion, el truco para mí fue asegurarme de que la RUTA para / opt / local / bin se estableciera ANTES de la línea fuente ... No tuve que meterme con los enlaces de OSX Python en / usr / bin o cualquier otra cosa. Además, WORKON_HOME ahora está predeterminado si no se establece en $ HOME / .virtualenvs
Mark

4
+1 para el comentario de @Mark. Además, para los usuarios de brew: la ruta real es usr/local/Cellar/python/<PYTHON-VERSION>/bin/.
rsenna

Gracias, me ayuda después de compilarme python 2.7.4 en Debian.
Zulu

En mi caso, el problema ocurrió solo por qué estaba tratando de iniciar sesión de forma remota en otra máquina. Sugerencia, esto significa que el problema no está en la máquina local, sino en la máquina en la que está iniciando sesión. Pensé en mencionarlo en caso de que alguien estuviera en ese lugar.
smileBot

23

Además, si tiene macports, asegúrese de que aparezca /opt/local/Library/Frameworks/Python.framework/Versions/2.7/binantes /Library/Frameworks/Python.framework/Versions/2.7/biny /usr/local/binen PATH. Luego establezca lo siguiente en usted .profile:

export VIRTUALENVWRAPPER_PYTHON=`which python`
export VIRTUALENVWRAPPER_VIRTUALENV=`which virtualenv`
source `which virtualenvwrapper.sh`

4
Estoy instalando python3 junto con mi sistema operativo python2 y la configuración VIRTUALENVWRAPPER_PYTHONresolvió mi problema.
Johan Gov

8

En mi caso, agregar esta línea en mi archivo .zshrc hizo el truco,

export VIRTUALENVWRAPPER_PYTHON=/usr/local/Cellar/python/2.7.13/bin/python2.7

3
export VIRTUALENVWRAPPER_PYTHON=/usr/local/Cellar/python/3.6.5/bin/python3.6para la última versión.
oba2311

en mi bash_profile,export VIRTUALENVWRAPPER_PYTHON="which python3"
Fai Zal Dong

8

Para cualquiera que use Ubuntu 18.04 y Python 3+ , esto funcionó para mí:

which python3 # outputs /usr/bin/python3 
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3  
source `which virtualenvwrapper.sh`  

4

Esto me pasó a mí y lo resolví reinstalando pip. Lo que sucedió fue que which pipdio /usr/bin/pipcomo resultado, mientras que which pythondio /usr/local/bin/python. El camino para pipdebería ser /usr/local/bin/pip. Esto probablemente se rompió cuando actualicé mi instalación de Python.

Si sigue la documentación de pip , puede reinstalar fácilmente pippara su configuración actual de Python. Necesitas:

  1. Descargue el script get-pip.py (vinculado directamente desde pipla documentación de).
  2. Corre python get-pip.py.

Esto resolvió mi problema.


3

Hay varias cosas que pueden provocar este error. Si tu entorno es

  • CentOS 7, con python3instalado desdeepel-release
  • pip3 instalado con python3.4 get-pip.py
  • virtualenvwrapper instalado con pip3
  • Un entorno virtual de Python hecho con mkvirtualenv -p /usr/bin/python3.4

Luego, por la razón que sea, el entorno virtual se crea sin la biblioteca virtualenvwrapper. Puede resolverlo simplemente instalándolo de nuevo, pero esta vez desde dentro de virtlualenv

[user@localhost ~] $ mkvirtualenv -p /usr/bin/python3.4 venv
Using base prefix '/usr'
New python executable in /home/user/.virtualenvs/venv/bin/python3.4
Also creating executable in /home/user/.virtualenvs/venv/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/user/.virtualenvs/venv/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/user/.virtualenvs/venv/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/user/.virtualenvs/venv/bin/preactivate
virtualenvwrapper.user_scripts creating /home/user/.virtualenvs/venv/bin/postactivate
virtualenvwrapper.user_scripts creating /home/user/.virtualenvs/venv/bin/get_env_details
/home/user/.virtualenvs/venv/bin/python3.4: Error while finding spec for 'virtualenvwrapper.hook_loader' (<class 'ImportError'>: No module named 'virtualenvwrapper')
/home/user/.virtualenvs/venv/bin/python3.4: Error while finding spec for 'virtualenvwrapper.hook_loader' (<class 'ImportError'>: No module named 'virtualenvwrapper')

# the virtualenv should now activated
(venv)[user@localhost ~] $ pip install virtualenvwrapper

2

Solo tenía que asegurarme de que existiera / usr / local / bin / python.

Para mi fue un simple:

ln -s /usr/local/bin/python2.7 /usr/local/bin/python

1

Me sale el mismo error . Descubrí que tenía una versión antigua de pip. Solucioné el error simplemente actualizando el pip.


0

Acabo de instalar Python 3.5, probé virtualenvwrapper y luego tuve este problema. Me di cuenta de que python3.5 estaba instalado /usr/local/bin/python3.5y NO /usr/bin/python3.5. Entonces, revisé mi script .bash_profile para que se vea como el siguiente y todo parece funcionar ahora

# Setting PATH for Python 3.5
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.5/bin:${PATH}"
export PATH
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3.5
export WORKON_HOME=$HOME/.virtualenvs
source /Users/bentaub/.virtualenvs/djangodev/bin/virtualenvwrapper.sh

Soy lo suficientemente novato como para no estar seguro de cómo ese 'local' en el camino a python3.5 me va a afectar a largo plazo pero, por ahora, funciona.


0

Tuve este problema después de desinstalar el virtualenvwrapperpaquete. Cuando iniciaba sesión con cualquier usuario (o sucon uno diferente), obtenía:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named virtualenvwrapper.hook_loader                                                                                                                                                                       
virtualenvwrapper.sh: There was a problem running the initialization hooks.                                                                                                                                                      

If Python could not import the module virtualenvwrapper.hook_loader,                                                                                                                                                             
check that virtualenv has been installed for                                                                                                                                                                                     
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is                                                                                                                                                                        
set properly.

La solución fue borrar el /etc/bash_completion.d/virtualenvwrapperarchivo.

Editar:

No elimine el archivo anterior o no se volverá a crear si lo vuelve a instalar virtualenvwrapper. En cambio, lo que debe hacer es purgeel virtualenvwrapperpaquete cuando lo desinstale. Así en Debian:

apt-get remove --purge virtualenvwrapper

0

Intente desinstalar su virtualenve virtualenvwrapperinstalarlo nuevamente usando pipen la versión 2.7 (creo).

Encontré el mismo error y simplemente hice esto y resolví mi problema.

Estoy usando U


0

A pesar de que hay una respuesta aceptada, pensé que podría poner lo que me solucionó.

Primero instalé Python y lo acababa de actualizar a través de Homebrew . También estoy usando ZSH, por lo que si algunos bits no coinciden con su salida, esa podría ser la razón.

Al ejecutar brew info python y mirar a través de la salida, encontré la siguiente buena información:

If you wish to have this formula's python executable in your PATH then add
the following to ~/.zshrc:
    export PATH="/usr/local/opt/python/libexec/bin:$PATH"

Así que agregué esto a la secuencia de comandos de inicio de mi terminal como se muestra y el error n aparece más.

Nota: inserté esto en otra parte de mi RUTA y el error persistió en el inicio.


0

Me encontré con un problema similar después de instalar el proyecto Conda / Anaconda. Esta pregunta fue muy útil para resolver mi problema en MAC. Al resolver el problema, mi .zshrcparte relevante se ve así:

export VIRTUALENVWRAPPER_PYTHON=$HOME/Applications/conda/bin/python
source $HOME/Applications/conda/bin/virtualenvwrapper.sh

Esto depende de dónde tenga instalado Conda y tendrá que calcularlo en su propio caso. Para obtener los detalles específicos para su entorno dado, dependiendo de dónde haya instalado anaconda, puede usar lo siguiente:

$  ~/ -name virtualenvwrapper.sh # to see where you have this. May already be prefilled in your shell profile[.zshrc or .profile]

$ which python   # to know the default python your project or rather where conda has installed python for you

NO OLVIDE DESINSTALAR E INSTALAR virtualenv y virtualenvwrapper como se destaca en otras respuestas.


0

Me encontré con este problema en un Centos 7.4.

Ninguna de las respuestas anteriores se adaptaba a mi caso. Después de investigar un poco, identifiqué esto con permisos de archivo demasiado estrictos en bibliotecas de python (supongo que la instalación de Python en Centos difiere un poco de otros sistemas POSIX).

Entonces, si todo lo demás falla, es posible que desee verificar que sus bibliotecas de Python sean legibles por el usuario con el que está tratando de ejecutar virtualenvwrapper.

En particular, verifique: /usr/lib/python3.6 /usr/lib64/python3.6 (modifique las rutas para diferentes versiones de Python).

Si ve eso groupy othersno tiene permisos de lectura y ejecución allí, agréguelos: sudo chmod og+rx -R /usr/lib/python3.6 sudo chmod og+rx -R /usr/lib64/python3.6

Nota: No estoy seguro de si esto funciona en contra de una política de seguridad de Centos, pero probablemente sea seguro siempre que no dé writepersmisiones.


0

En mi situación (OS X 10.13.6), esto lo hizo

brew install python2 --upgrade

0

Tuve el mismo problema que este y pasé mucho tiempo configurando lo que estaba mal. Y finalmente descubrí lo que estaba mal.

Primero busqué dónde existe la carpeta virtualenvwrapper. En mi caso /usr/local/lib/python3.7/site-packages. Dentro de la carpeta está hook_loader.py que causó el error.

A continuación, usé el script de Python.

python3

import sys;print('\n'.join(sys.path))

No pude encontrar el directorio /usr/local/lib/python3.7/site-packages, así que por fin escribí,

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.7/site-packages

al archivo .bashrc. Hecho.

Significado de PYTHON PATH

Como puede ver en el enlace anterior, PYTHONPATH aumenta la ruta de búsqueda predeterminada para los módulos.

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.