虚拟环境管理器virtualenvwrapper在Mavericks升级后出现终端问题

44

升级到OSX Mavericks后,在终端中我收到了这个消息:

/usr/bin/python: No module named virtualenvwrapper
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.

你确定 virtualenvwrapper.sh 应该在 /usr/bin/python 中吗?还是你安装在了不同版本的 Python 中(例如使用 Homebrew 安装)? - Felix Zumstein
9个回答

101

尝试重新安装pip,然后重新安装virtualenvwrapper(在升级到Mavericks之后我不得不执行这些步骤):

$ sudo easy_install pip
$ sudo pip install --upgrade virtualenvwrapper

2
是的,我重新安装了pip并使用python脚本进行了升级,然后按照您的建议升级了virtualenvwrapper。现在一切都很好,非常感谢。 - Ryan Allen
1
这对我有用,但只是在按照此帖子重新安装easy_install后才有效。 - caiman

11

重新排列导出顺序,使得在.bash_profile文件中,python路径在virtualenv命令之前。


# python path
export PATH=/usr/local/bin:$PATH

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

2
不要从.bashrc中调用virtualenvwrapper.sh - 这在.bash_profile中被早期调用。 - gilbertpilz

6
尝试编辑.bash_profile文件。
# Home brew
export PATH=/usr/local/bin:$PATH

# 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

在macOS High Sierra上,只有这个对我起作用了。谢谢@Tuan - Nick

4
我不建议使用sudo运行pip。 这篇文章是我在升级到Mavericks后遇到同样问题的解决方案。
本质上,卸载之前的任何虚拟环境和brew安装的Python(使用which <command>检查您是否删除了除/usr/bin/python系统Python之外的所有内容),然后重新干净地安装它们。
brew install python --with-brewed-openssl
# Open a new terminal tab now (to access /usr/local/bin/python)
pip install virtualenv
pip install virtualenvwrapper

1

我在使用 MacOS High Sierra 时遇到了同样的问题。我通过在我的 .bash_profile 文件中添加以下内容来解决它:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Code
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh

什么是“代码”? - chris Frisina
@chrisFrisina 代码是我 /home 目录下的一个文件夹,您可以更改它并根据需要命名,在创建该目录后。 - neosergio

1

pip install --upgrade virtualenvwrapper会解决这个问题,但永远不要使用sudo pip,因为这会改变系统范围内的设置。如果pip在没有sudo的情况下抛出权限错误,则应该解决这些错误,然后尝试只使用pip install <--upgrade> $(package)

我建议您安装homebrew,然后使用brew install pip来安装pip,这将为您安装最新稳定版本的pip。

  1. 安装homebrew,然后运行brew doctor。如果有任何警告,请修复(实际上brew会告诉你如何修复)。

  2. 您可能需要删除Mac自带的系统范围内的Python,并使用brew安装所需版本。使用this来删除系统范围内的Python。

  3. 使用brew install python或/和brew install python3来安装所需的Python版本。
  4. 最后运行pip install --upgrade virtualenvwrapper

  5. 现在永远不要使用sudo pip,只使用pip


1

您只需要正确配置路径。在终端中运行以下命令:

  1. which python

输出 -

/usr/bin/python
  1. which virtualenvwrapper.sh

输出结果:

/usr/local/bin/virtualenvwrapper.sh
  1. echo $VIRTUALENVWRAPPER_PYTHON

    /usr/local/bin/python

正如您所看到的,变量$VIRTUALENVWRAPPER_PYTHON指向错误的Python路径。因此,我们需要重置变量$VIRTUALENVWRAPPER_PYTHON的路径。

  1. export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python

现在运行以下命令:

source /usr/local/bin/virtualenvwrapper.sh 

我有同样的问题,但在第3步运行echo $VIRTUALENVWRAPPER_PYTHON时,我得到了usr/bin/python3,因为在第1步中我有usr/bin/python - Chacho Fuva
第三步对我非常有帮助,因为一直以来我都指向了错误的 python 路径。一旦我把路径弄对了,问题就解决了。再次感谢。 - MwamiTovi

0

运行这两个命令帮助我摆脱了它(在macOS High Sierra上进行了软件更新)

$ sudo easy_install pip

$ sudo pip install --upgrade virtualenvwrapper

0

首先使用以下命令在 .bashrc 中交叉验证 PATH:

which virtualenv
which virtualenvwrapper.sh

输出结果为:

echo $VIRTUALENVWRAPPER_PYTHON

并且

which python3

应该是相同的

/usr/bin/python3

根据上述结果配置路径

export WORKON_HOME=~/.virtualenvs

export MY_PROJECT=~/my_proj

export VIRTUALENVWRAPPER_WORKON_CD=1

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

export VIRTUALENVWRAPPER_VIRTUALENV='which virtualenv 的结果'

source 'which virtualenvwrapper.sh 的结果'

如果验证路径后仍然存在INITIALIZATION HOOK ERROR。

那么,在source中将所有内容保留不变,只需将virtualenvwrapper.sh替换为virtualenvwrapper_lazy.sh

然后它应该可以工作了


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接