【问题标题】:Setting interpreter in Virtualenvwrapper在 Virtualenvwrapper 中设置解释器
【发布时间】:2015-03-17 20:36:03
【问题描述】:

我在 OSX Mavericks 中使用 virtualenvwrapper 已经有一段时间了。 我通过自制软件安装了 python 2.x 和 3.x。为 python 2 创建环境不是问题。但是现在我想用python 3创建环境,所以根据documentation我可以将变量VIRTUALENVWRAPPER_PYTHON设置为解释器的完整路径来选择解释器:

# VIRTUALENVWRAPPER
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
export WORKON_HOME="$HOME/.virtualenvs"
export PROJECT_HOME=$HOME/Python_projects
source /usr/local/bin/virtualenvwrapper.sh

所以我做到了,但是当我打开终端时它对我大喊:

/usr/local/opt/python3/bin/python3.4: Error while finding spec for 
'virtualenvwrapper.hook_loader' (<class 'ImportError'>: 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/local/opt/python3/bin/python3.4 and    
that PATH is set properly.

我检查了那个目录,virtualenvwrapper 和 virtualenv 都安装在那里。那么如何为 python 3 安装这些包呢?

这些软件包没有安装,所以我安装了它们:

$ pip3 install install virtualenvwrapper
$ pip3 install install virtualenvwrapper

现在问题似乎是另一个问题:

$ mkvirtualenv -p /usr/local/bin/python3 test

File /usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 97, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: dlopen(/Users/javi/.virtualenvs/test/lib/python3.4/lib-dynload/_ssl.so, 2): Symbol not found: _SSLv2_method
  Referenced from: /Users/javi/.virtualenvs/test/lib/python3.4/lib-dynload/_ssl.so
  Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
 in /Users/javi/.virtualenvs/test/lib/python3.4/lib-dynload/_ssl.so

解决方案:

做完之后:

$ brew uninstall --force python
$ brew uninstall --force python3

然后再次安装它们:

$ brew install python
$ brew install python3

并修复一些损坏的链接:

$ brew linkapps python
$ brew linkapps python3

问题似乎消失了。默认情况下,virtualenvwrapper 在我的新环境中放置一个 python3 可执行文件,这要归功于我的 .bashrc 中的行:

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3

而且,当我需要在里面创建一个带有 python 2.X 的环境时,我可以这样做:

$ mkvirtualenv -p /usr/local/bin/python test4

而且运行良好。

【问题讨论】:

    标签: python-3.x virtualenvwrapper


    【解决方案1】:

    我没有 OS X 来测试它,但看起来您已将 virtualenv(和 virtualenvwrapper)安装到 python2.7 站点包目录 (or the homebrew site-packages directory),而不是 python3.4。

    运行时: 源 /usr/local/bin/virtualenvwrapper.sh 这是说

    检查是否已安装 virtualenvwrapper VIRTUALENVWRAPPER_PYTHON=/usr/local/opt/python3/bin/python3.4

    我最近在 ubuntu 上安装了这个,并使用 pip-3.4 将 virtualenv 安装到 python3.4 站点包。

    编辑: python3 osx guide 说 pip3 带有自制的 python3 包。使用 pip3 安装 virtualenvwrapper 将解决您的问题。

    注意:如果你安装了两个 virtualenvwrapper(通过 pip 然后 pip3),我不知道它们是否会很好地结合在一起。

    【讨论】:

    • 最初的想法不是安装2个不同的virtualenvwrappers,而只是创建带有python 3解释器的虚拟环境:mkvirtualenv -p /usr/local/bin/python3 test,但它不起作用。
    • 然后不要将VIRTUALENVWRAPPER_PYTHON 设置为python 3,它将默认为python2,source /usr/local/bin/virtualenvwrapper.sh 将起作用,您可以使用python3(如您所说)和@987654326 创建一个virtualenv @.
    • 谢谢克雷格。老实说,我现在更喜欢这样做: 1. 将VIRTUALENVWRAPPER_PYTHON 设置为 Python3。 2. 在我需要 Python2 的情况下使用--python 选项。但是,嘿,我总是可以反过来做。
    • 是的,同样的区别。在我看到你更新了你的问题之前,我发布了它!仅供参考,virtualenvwrapper 安装到由您使用的 pip 版本确定的 pythonX/site-packages 目录。 virtualenvwrapper 还将文件放在一些常见的地方,例如:/usr/local/bin/virtualenvwrapper.sh。通过使用 pip (python2.x) 安装,然后使用 pip3 安装,您将使用 python3.x 版本覆盖这些文件。我不知道它是否会导致任何问题,但这就是它默认为 python3.x 的原因。
    • @Bobbywankenoby,这应该是公认的答案吗?如果是这样,请单击左上角的复选标记。
    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 2021-06-26
    • 1970-01-01
    • 2010-12-16
    • 2021-12-24
    • 1970-01-01
    • 2018-02-13
    • 2017-08-08
    相关资源
    最近更新 更多