Python Virtualenv - 没有名为virtualenvwrapper.hook_loader的模块

时间:2012-07-16 15:11:23

标签: python virtualenv virtualenvwrapper

我正在运行Mac OS 10.6.8。并希望除了python 2.6还安装python 2.7并在新的virtualenv中使用python 2.7。我执行了以下步骤:

我下载了python 2.7并安装了它:

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

然后我运行命令使用python2.7设置一个新的virtualenv:

mkvirtualenv --python=python2.7 mynewenv

我的.bash_profile如下所示:

# 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

现在,当我打开控制台时,我收到以下错误消息。

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.

我还在另一篇文章中发现我应该升级virtualenvwrapper。这没有用。

sudo pip install virtualenvwrapper --upgrade

任何帮助都将不胜感激。

16 个答案:

答案 0 :(得分:51)

该问题已按照以下步骤解决:

#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

重新安排导出命令,以便将它放在我的.bash_profile文件中的virtualenv命令之前:

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

重新安装setuptools,轻松安装和PIP。显然需要这样才能使它们与新的python版本一起正常工作:

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

sudo easy_install-2.7 pip

pip install virtualenv

答案 1 :(得分:22)

此外,如果您有macport,请确保在/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin之前列出/Library/Frameworks/Python.framework/Versions/2.7/bin,在PATH中列出/usr/local/bin。然后在.profile中设置以下内容:

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

答案 2 :(得分:7)

在我的情况下,将此行添加到我的.zshrc文件中就可以了,

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

答案 3 :(得分:4)

这件事发生在我身上,我通过重新安装pip解决了这个问题。结果是which pip给了/usr/bin/pip,而which python给了/usr/local/bin/pythonpip的路径应为/usr/local/bin/pip。当我更新我的Python安装时,这可能会破坏。

如果您follow the pip documentation,您可以轻松地为当前正在运行的Python设置重新安装pip。你需要:

  1. 下载get-pip.py脚本(直接从pip的文档链接)。
  2. 运行python get-pip.py
  3. 这解决了我的问题。

答案 4 :(得分:3)

有很多事情可能会导致此错误。如果你的环境是

  • CentOS 7,python3
  • 安装了epel-release
  • pip3已安装python3.4 get-pip.py
  • virtualenvwrapper已安装pip3
  • 使用mkvirtualenv -p /usr/bin/python3.4
  • 制作的python虚拟环境

然后,无论出于何种原因,在没有virtualenvwrapper库的情况下创建虚拟环境。你可以通过再次安装来解决它,但这次是在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

答案 5 :(得分:2)

我必须确保/ usr / local / bin / python存在。

对我来说这很简单:

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

答案 6 :(得分:2)

对于使用 Ubuntu 18.04 Python 3 + 的任何人,这都对我有用:

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

答案 7 :(得分:1)

我得到了同样的错误。发现我有旧版的点子。我只是通过升级点来修复错误。

答案 8 :(得分:0)

我刚刚安装了python 3.5,尝试了virtualenvwrapper然后遇到了这个问题。我开始意识到python3.5安装在/usr/local/bin/python3.5而不是/usr/bin/python3.5。所以,我将我的.bash_profile脚本修改为如下所示,现在一切似乎都有效了

# 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

我已经足够新手不能确定python3.5路径中的'local'会如何影响我从长远来看,但是现在它可以工作。

答案 9 :(得分:0)

卸载 virtualenvwrapper包之后,我遇到了这个问题。当我登录任何用户(或su到另一个用户)时,我会得到:

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.

解决方案是删除/etc/bash_completion.d/virtualenvwrapper文件。

修改

请勿删除上述文件,否则重新安装virtualenvwrapper时将无法重新创建。相反,卸载它时,您需要purge virtualenvwrapper包。像Debian一样:

apt-get remove --purge virtualenvwrapper

答案 10 :(得分:0)

尝试卸载{ "size": 1000, "min_score": 1, "query": { "bool": { "must": [ { "query_string": { "query": "MY_DATA_TYPE", "fields": [ "doc.db_doc_type" ] } }, { "query_string": { "query": "MY_SPECIFIC_TYPE", "fields": [ "doc.db_doc_specific" ] } } ], "should": { "match": { "doc.such": { "query": "F-G/4" } } } } } } virtualenv并使用版本2.7中的virtualenvwrapper重新安装(我认为)。

我遇到了同样的错误,我刚刚做了这个并解决了我的问题。

我使用U

答案 11 :(得分:0)

即使有一个已接受的答案,我认为我会为我修复它。

首先我安装了Python,并通过Homebrew 升级了。我也在使用ZSH,所以如果某些位与输出不匹配,那么这可能是原因。

通过运行 brew info python 并查看输出,我发现了以下一些信息:

dependencies {
    compile 'com.android.support:design:+'
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.android.volley:volley:+'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

所以我将此添加到我的终端启动脚本中,如图所示,错误n显示更长。

注意:我将其插入到PATH的另一部分中,并且启动时错误仍然存​​在。

答案 12 :(得分:0)

安装Conda / Anaconda项目后遇到类似问题。这个问题对于解决我在MAC上的问题非常有帮助。解决问题后我的.zshrc相关部分看起来像这样:

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

这取决于我安装conda的位置,你必须在自己的情况下计算。要根据您安装anaconda的位置获取给定环境的详细信息,可以使用以下命令:

$  ~/ -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

请勿忘记卸载并安装virtualenv和virtualenvwrapper,如其他答案所示。

答案 13 :(得分:0)

刚刚在Centos 7.4上碰到了这个问题。

上述答案都不适合我的情况。经过相当多的挖掘后,我在python库中确定了过于严格的文件权限(我猜Centos上的python安装与其他POSIX系统略有不同)。

因此,如果其他一切都失败了,您可能需要检查您的python库是否是您尝试运行virtualenvwrapper的用户可读的。

特别检查: /usr/lib/python3.6 /usr/lib64/python3.6 (修改不同python版本的路径)。

如果您看到groupothers缺少读取和执行权限,请添加它们: sudo chmod og+rx -R /usr/lib/python3.6 sudo chmod og+rx -R /usr/lib64/python3.6

注意: 我不确定这是否适用于Centos安全策略,但只要您不提供write个问题,它就可能是安全的。

答案 14 :(得分:0)

在我的情况下(OS X 10.13.6),做到了

brew install python2 --upgrade

答案 15 :(得分:0)

我和这个人有同样的问题,花了很多时间来找出问题所在。我终于发现了问题所在。

首先,我查找了virtualenvwrapper文件夹所在的位置。 在我的情况下/usr/local/lib/python3.7/site-packages。 文件夹内是hook_loader.py,它导致了错误。

接下来,我使用了python脚本。

python3

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

我找不到/usr/local/lib/python3.7/site-packages目录,所以, 最后我写了,

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

.bashrc文件。完成。

Meaning of PYTHON PATH

如您在上面的链接中所见,PYTHONPATH扩展了模块的默认搜索路径。