没有名为“virtualenvwrapper”的模块
Posted
技术标签:
【中文标题】没有名为“virtualenvwrapper”的模块【英文标题】:No module named 'virtualenvwrapper' 【发布时间】:2015-05-22 21:04:18 【问题描述】:我正在使用 Ubuntu 14.04 LTS 实例在 Amazon EC2 上设置一个 Django 项目。我想使用 Python 3 编写我的代码。我被告知最好的方法是使用virtualenvwrapper
。我已经成功安装virtualenvwrapper
并放了
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
进入我的.bashrc
文件。现在我明白了:
/usr/bin/python3.4: Error while finding spec for 'virtualenvwrapper.hook_loader' (<class 'ImportErro
r'>: 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 virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4 and that PATH is
set properly.
我该如何解决这个问题?
【问题讨论】:
您是否已成功为该版本的 Python 安装了virtualenvwrapper
?如果你在终端运行/usr/bin/python3.4
,然后尝试import virtualenvwrapper
,会发生什么?
ImportError: No module named 'virtualenvwrapper' - 我猜不是。我为基础解释器安装了它,这里是 python 2.7
您可能需要pip3 install virtualenvwrapper
才能为 3.x 解释器安装它。或者,请注意安装在 2.x 下的virtualenvwrapper
可以仍然使用 -p
参数创建 3.x virtualenv
s(参见例如***.com/q/1534210/3001761)。
谢谢,你成功了!你介意回答一下吗?我同意你的第二个建议。请查看编辑。
您不应该将结果编辑到问题中 - 我很高兴您将所学内容写成自己的答案!
【参考方案1】:
除了使用-p
标志指定不同的python 解释器,您还可以将所需的解释器配置为默认值。
根据virtualenvwrapper
的documentation,virtualenvwrapper.sh
在$PATH
上找到第一个python
和virtualenv
程序并记住它们以供以后使用。
如果您的virtualenvwrapper
未安装在您操作系统的默认python 解释器(/usr/bin/python
)上,请确保您覆盖以下环境变量:
VIRTUALENVWRAPPER_PYTHON
到你的 python 解释器的完整路径
VIRTUALENVWRAPPER_VIRTUALENV
到 virtualenv 的完整路径
例如,在我的.bash_profile
(Mac) 上:
#virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/Library/Frameworks/Python.framework/Versions/3.5/bin/virtualenv
source /Library/Frameworks/Python.framework/Versions/3.5/bin/virtualenvwrapper.sh
通过运行 source ~/.bash_profile
重新加载新变量
【讨论】:
这个问题在 Mac 上似乎很普遍,但如果你在 Ubuntu 上,你会想要使用 '/usr/bin/python3'、'usr/local/bin/virtualenv' 和 ' /usr/local/bin/virtualenvwrapper.sh',假设您已安装到默认位置。【参考方案2】:在最近的 Homebrew 更新后我遇到了同样的问题。
在过去,大多数人会在系统站点包中运行pip install virtualenvwrapper
,这样就可以了。
Homebrew 通过 1) 不再隐藏系统 python,以及 2) 不再将 pip 符号链接到 pip2/pip3
,从而打破了这个工作流程。
大部分用户在找不到pip
时会意识到这一点,然后尝试使用pip2/pip3
。但是,使用pip2/pip3
会产生问题,因为现在为python2/python3
安装了virtualenvwrapper
,而不是为python
。所以当virtualenvwrapper
运行并调用python时,它不会在系统python的站点包中找到virtualenvwrapper/virtualenv
python包。
显式设置 VIRTUALENVWRAPPER_PYTHON
是最干净的解决方法,而不是 hack。这是我在 dotfiles 中的做法
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
【讨论】:
tnx.需要在WORKON_HOME
之前设置VIRTUALENVWRAPPER_PYTHON
。
同样的问题。我通过在 py2 (pip) 和 py3 (pip3) 上都安装 virtualenvwrapper 来修复它【参考方案3】:
在 Ubuntu 20.04 上,尝试使用 python 3.8(python 3 默认)安装 virtualenvwrapper 并使用 python 2.7(python 2 默认)初始化包装器时可能会出现问题。
TL;DR
手动设置python3解释器
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh
更详细,为什么会这样?
让我们获取一些信息:
$ which python
/usr/bin/python
$ python --version
Python 2.7.18rc1
$ which python3
/usr/bin/python3
$ python3 --version
Python 3.8.2
$ pip3 --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
按照指南,我们被要求使用 pip (python 3) 安装 virtualenvwrapper:
pip3 install virtualenvwrapper
virtualenvwrapper 的当前稳定版本(4.8.4)是linking to default python
version,我们看到它是python 2.7:
VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
所以,问题是我们在 python3 中安装了 virtualenvwrapper 并尝试使用 python2(源 shell 脚本)进行初始化。因此,修复方法是通过覆盖默认值来使用 python 3 进行初始化。
但是,下一个版本很可能会包含fix already merged onto master that look from highest to lowest python version:
if [ "$VIRTUALENVWRAPPER_PYTHON:-" = "" ]
then
for NAME in python3 python2 python
do
python_executable="$(which $NAME 2>/dev/null)"
if ! [ -z "$python_executable" ]
then
if $python_executable -m 'virtualenvwrapper.hook_loader' --help >/dev/null 2>&1
then
VIRTUALENVWRAPPER_PYTHON=$python_executable
break
fi
fi
done
Using in the documentation,修复方法是在采购之前手动设置要使用的 Python 解释器:不是 python (2.7),而是 python3(这里是 3.8)
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh
【讨论】:
【参考方案4】:如果你使用 brew 安装 python,你需要确保你设置了这个环境变量:
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
在您的 bash_profile(或您正在使用的任何 shell)中。
【讨论】:
【参考方案5】:由于我不时更改 python 版本,因此到目前为止,此配置一直有效,因为它是动态的:
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/development
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
export VIRTUALENVWRAPPER_VIRTUALENV=$(which virtualenv)
source $(which virtualenvwrapper.sh)
然后是:
source ~/.zshrc
【讨论】:
【参考方案6】:上述解决方案没有帮助我。
这是我的工作方式:
# if doesn't work try sudo pip uninstall virtualenvwrapper
pip uninstall virtualenvwrapper
# rm old virtualenv scripts
rm ~/.local/bin/virtualenv*
# re-install viertualenv
pip install --user virtualenvwrapper
【讨论】:
【参考方案7】:按照乔恩的建议,我跑了:
ubuntu@ip-172-31-22-65:~$ mkvirtualenv -p /usr/bin/python3.4 env1
Running virtualenv with interpreter /usr/bin/python3.4
Using base prefix '/usr'
New python executable in env1/bin/python3.4
Also creating executable in env1/bin/python
Installing setuptools, pip...done.
(env1)ubuntu@ip-172-31-22-65:~$ deactivate
ubuntu@ip-172-31-22-65:~$ ls
ubuntu@ip-172-31-22-65:~$ ls -a
. .. .bash_history .bash_logout .bashrc .cache .pip .profile .ssh .virtualenvs
ubuntu@ip-172-31-22-65:~$ workon
env1
ubuntu@ip-172-31-22-65:~$ workon env1
(env1)ubuntu@ip-172-31-22-65:~$ which python
/home/ubuntu/.virtualenvs/env1/bin/python
(env1)ubuntu@ip-172-31-22-65:~$ python -V
Python 3.4.0
我已经离开了上面列出的 .bashrc。正如 Jon 上面所说,安装 virtualenvwrapper 会安装在默认 python 上,并在您创建的任何 virtualenv 中使用默认 python,除非 -p 标志用于指定不同的 python 解释器。
【讨论】:
请确保这是一个有用的、独立的答案 - 即解释为什么这是有效的(并且可能包括您对.bashrc
所做的更改)。
【参考方案8】:
确保您使用的是正确版本的 python。就我而言,我正在使用
\usr\bin\python3
代替
\usr\local\bin\python3.7
【讨论】:
【参考方案9】:对于那些在使用 Ubuntu 18.04 时遇到同样问题的人,请注意 .bashrc 需要进行以下编辑。
将source /usr/local/bin/virtualenvwrapper.sh
更改为
source ~/.local/bin/virtualenvwrapper.sh
注意本地目录是隐藏的
【讨论】:
【参考方案10】:我的统一 OpenCV 环境设置功能可在 MAC 和 Linux 环境中无缝运行...
【讨论】:
@Shree :检查这个答案......希望它对未来的访问者有所帮助。如果您愿意,请点赞。 请以文字形式回答,不要粘贴图片以上是关于没有名为“virtualenvwrapper”的模块的主要内容,如果未能解决你的问题,请参考以下文章
virtualenvwrapper 安装失败 - “啥会导致 ImportError:没有名为核心的模块”等?
python------virtualenv&virtualenvwrapper的使用