【问题标题】:cannot load Python 3.5 interpreter for virtualenv无法为 virtualenv 加载 Python 3.5 解释器
【发布时间】:2017-01-30 12:12:47
【问题描述】:

我已经通过 Anaconda 在 OSX 系统上安装了 Python 3.5。安装并激活虚拟环境后,

virtualenv venv
source venv/bin/activate

Python 版本是 Python 2.7.10。虽然我们可以在virtualenv 中加载我们选择的解释器,但“/usr/bin/”只有 Python 2.6 和 2.7 的文件夹。找出 Anaconda python 3.5 路径后(/Users/Username/anaconda/lib/python3.5) 并尝试加载它,

for: virtualenv -p /Users/Username/anaconda/lib/python3.5 venv

代码返回 [Errno 13] Permission Denied

> Running virtualenv with interpreter /Users/Username/anaconda/lib/python3.5
> Traceback (most recent call last):   File "/usr/local/bin/virtualenv",
> line 11, in <module>
>     sys.exit(main())   File "/Library/Python/2.7/site-packages/virtualenv.py", line 790, in main
>     popen = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)   File
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",
> line 710, in __init__
>     errread, errwrite)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",
> line 1335, in _execute_child
>     raise child_exception
OSError: [Errno 13] Permission denied

for: virtualenv -p /Users/Username/anaconda/bin/python3.5 venv

似乎还有其他类型的错误...

Running virtualenv with interpreter /Users/Username/anaconda/bin/python3.5
Using base prefix '/Users/Username/anaconda'
New python executable in venv/bin/python3.5
Not overwriting existing python script venv/bin/python (you must use venv/bin/python3.5)
ERROR: The executable venv/bin/python3.5 is not functioning
ERROR: It thinks sys.prefix is '/Users/Username/.../targetfolder' (should be '/Users/Username/.../targetfolder/venv')
ERROR: virtualenv is not compatible with this system or executable

【问题讨论】:

  • 您可以使用-p 选项指定 Anaconda 的 Python 3 解释器的路径。
  • anaconda 的 python 通常会自动找到,至少在 ubuntu 上是这样。在 virtualenv 之外时,python 是否使用 anaconda python?
  • 是的,在 virtualenv 之外它使用 Python 3.5。但仍在弄清楚如何将其加载到 virtualenv...
  • 试试 bin/python3.5 而不是 lib/python3.5 ?
  • 谢谢!现在权限错误消失了,但似乎出现了另一个错误,请参阅我更新的问题以获取更多信息

标签: python python-2.7 python-3.x virtualenv


【解决方案1】:
ERROR: The executable venv/bin/python3.5 is not functioning
ERROR: It thinks sys.prefix is '/Users/Username/.../targetfolder' (should be '/Users/Username/.../targetfolder/venv')
ERROR: virtualenv is not compatible with this system or executable

此错误是由于尝试组合不兼容的 Python 版本和 virtualenv 工具而导致的。我不确定不兼容的确切来源,但我知道如何解决它。

假设您的 Python 功能合理且最新(阅读:3.3 或更高版本),这应该始终有效:

/path/to/python3.5 -m venv venv

第一个 venv 是venv module。第二个是您要在其中创建 virtualenv 的目录的名称。该命令要求 Python 自己创建一个 virtualenv,而不是使用第三方工具。因此,我们有理由相信 Python 会正确地做到这一点,尤其是它不会与自身不兼容。


不幸的是,与 Anaconda 一起安装的 Python 版本不能被描述为“功能合理”,因为it lacks ensurepip。这使得 venv 模块无法将 pip 引导到您的 virtualenv 中。所以你需要在没有 pip 的情况下构建你的 venv,然后手动安装它:

/path/to/python3.5 -m venv --without-pip venv

然后从 virtualenv 中下载并运行 get-pip.py

【讨论】:

  • 谢谢!如前所述,我在 Python 3.5 上,所以应该可以工作......虽然下面是输出:无法将'/Users/Username/anaconda/bin/python3.5'符号链接到'/Users/targetfolder/venv/bin/python3。 5',错误:命令'['targetpath/venv/bin/python3.5','-Im','ensurepip','--upgrade','--default-pip']'返回非零退出状态-11
  • 试试--copies 标志?如果失败,您可能不得不使用--without-pip,这相当不方便。
  • 谢谢!你能详细说明一下吗? /path/to/python3.5 -m venv venv --copies 是什么意思?
  • 这将可能工作,但迂腐地说它应该在模块名称之后和目标目录名称之前(所以-m venv --copies venv)。此外,如果目标目录已经存在(因为您在上一次运行后没有清理它),您必须传递 --clear 标志来告诉 venv 模块删除现有的 cruft。
  • 非常感谢您的指导!没想到Anaconda python会这么棘手,需要采取一些步骤。使用提供的方法可以解决所有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多