没有名为'virtualenvwrapper'的模块

use*_*629 34 python linux ubuntu amazon-ec2 virtualenvwrapper

我正在使用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
Run Code Online (Sandbox Code Playgroud)

进入我的.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.
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

tro*_*ish 27

-p您可以将所需的解释器配置为默认值,而不是使用flag 指定不同的python解释器.

virtualenvwrapper文件,virtualenvwrapper.sh找到的第一个pythonvirtualenv上的程序$PATH,并记住它们以供以后使用.

如果您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
Run Code Online (Sandbox Code Playgroud)

通过运行重新加载新变量 source ~/.bash_profile

  • 这个问题在Mac上似乎很普遍,但是如果你在Ubuntu上,你会想要使用'/ usr/bin/python3','usr/local/bin/virtualenv'和'/ usr/local/bin/virtualenvwrapper .sh',假设您已安装到默认位置. (5认同)

nph*_*dke 10

在最近的Homebrew更新后我遇到了同样的问题.

在过去,大多数人都会遇到pip install virtualenvwrapper系统站点包,它会起作用.

Homebrew打破了这个工作流程1)不再遮蔽系统python,2)不再将符号链接到pip pip2/pip3.

大多数用户在找不到时会意识到这一点pip,然后尝试使用pip2/pip3.但是,使用pip2/pip3会产生问题,因为virtualenvwrapper现在已安装python2/python3,但不是python.因此,当virtualenvwrapper运行并调用python时,它将无法virtualenvwrapper/virtualenv在系统python的站点包中找到python包.

明确设置VIRTUALENVWRAPPER_PYTHON是最干净的修复,而不是黑客.这是我在dotfiles中的表现

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
Run Code Online (Sandbox Code Playgroud)


x0s*_*x0s 10

在 Ubuntu 20.04 上,尝试使用 python 3.8(默认为 python 3)安装 virtualenvwrapper 并使用 python 2.7(默认为 python 2)初始化包装器时可能会出现问题。

TL; 博士

手动设置python3解释器

export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)

更详细地说,为什么会发生这种情况?

让我们得到一些信息:

$ 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)
Run Code Online (Sandbox Code Playgroud)

按照指南,我们被要求使用 pip (python 3) 安装 virtualenvwrapper: pip3 install virtualenvwrapper

virtualenvwrapper 的当前稳定版本 (4.8.4)链接到默认python版本,我们看到它是 python 2.7:

VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
Run Code Online (Sandbox Code Playgroud)

所以,问题是我们在 python3 中安装了 virtualenvwrapper 并尝试使用 python2(采购 shell 脚本)进行初始化。因此,修复方法是通过覆盖默认值使用 python 3 进行初始化。

但是,很可能下一个版本之一将包含一个已经合并到 master修复程序,从最高到最低的 python 版本

VIRTUALENVWRAPPER_PYTHON="$(command \which python)"
Run Code Online (Sandbox Code Playgroud)

在文档中使用,修复是在采购之前手动设置要使用的 Python 解释器:不是 python (2.7) 但 python3 (3.8 here)

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
Run Code Online (Sandbox Code Playgroud)


end*_*and 8

如果你使用 brew 来安装 python,你需要确保你设置了这个环境变量:

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)

在您的 bash_profile (或您使用的任何外壳)中。


小智 8

由于我时不时地更改 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)
Run Code Online (Sandbox Code Playgroud)

然后是:

source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)


use*_*629 1

按照乔恩的建议,我跑了:

 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
Run Code Online (Sandbox Code Playgroud)

我已经保留了上面列出的 .bashrc。正如 Jon 上面所说,安装 virtualenvwrapper 会安装在默认的 python 上,并在您创建的任何 virtualenv 中使用默认的 python,除非 -p 标志用于指定不同的 python 解释器。

  • 请确保这是一个有用的、独立的答案 - 即解释*为什么*它有效(并且大概包括您对“.bashrc”所做的更改)。 (2认同)