【问题标题】:python virtualenv different behavior from activate and bin/pythonpython virtualenv 与 activate 和 bin/python 不同的行为
【发布时间】:2016-06-21 11:45:32
【问题描述】:

我创建了几个月的 virtualenv。我遇到了一个问题。

当我激活虚拟环境时,我可以访问像 django 这样的库:

source virtualenv/jsms/bin/activate
(jsms)local% python
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> exit()
(jsms)local% deactivate

但是当我使用 bin 文件夹中的 python 时,我无法访问 django:

local% virtualenv/jsms/bin/python
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named django

更奇怪的是,当我使用 bin 文件夹中的 python3.4 时,我使用的是 python 2.7

local% virtualenv/jsms/bin/python3.4
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

你知道一种直接从 bin 文件夹中的 python 访问 lib 的方法吗?

【问题讨论】:

  • 您为什么希望能够做到?您需要activate 虚拟环境的原因是因为它不仅仅是指向正确的解释器那么简单。你到底想达到什么目的?
  • 我想从另一个 python 脚本运行 django dev server。我尝试使用 os.popen('~/virtualenv/jsms/bin/python ~/project/manage.py runserver 127.0.0.1:8000') 但它不起作用。我不能使用 os.popen('~/virtualenv/jsms/bin/activate') 然后 os.popen('~/project/manage.py runserver 127.0.0.1:8000 ')
  • 为什么其他脚本不能在同一个环境下运行?
  • 由于我公司的基于python由系统管理员管理,开发人员使用他们的virtualenv。

标签: python django virtualenv


【解决方案1】:

activate 只是一个 bash 脚本,因此您可以随时查看激活文件并查看它在做什么,但我认为您正在寻找的是环境变量 PYTHONHOME。我会尝试:

export OLD_PYTHON_HOME="$PYTHONHOME"
unset PYTHONHOME
virtualenv/jsms/bin/python3.4 --version

对于 Windows,您可以使用 activate.bat 模板中的以下代码:

if defined PYTHONHOME (
    set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
    set PYTHONHOME=
)

【讨论】:

  • 感谢您的回答,但我需要一个适用于 Mac OS 和 Windows 的解决方案。
  • 我在您关于 windows 的原始帖子中看到零,并且 windows 的命令行和 Mac OS 的命令行完全不同,除非您使用的是 Windows 10 的内置 ubuntu。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2013-10-20
  • 1970-01-01
  • 2012-08-11
  • 2010-12-04
相关资源
最近更新 更多