25

我使用 Python 3.3 的内置方式创建并激活了一个 virtualenv (venv):

$ python3.3 -m venv env
$ source env/bin/activate

此时python是我的 virtualenv 中的 python,我期望它:

(env) $ which python
/my_home_directory/env/bin/python

现在我想安装distribute和pip,所以我下载安装脚本并运行它们:

(env)$ wget http://python-distribute.org/distribute_setup.py
(env)$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
(env)$ python distribute_setup.py
(env)$ python get-pip.py

这些命令成功完成。在这一点上,我检查了我的 venv 以找到另一个以前不存在的名为“local”的目录。env/local/bin 包含我的 easy_install 和 pip 可执行文件,它们仍然是我系统现有的 easy_install 和 pip 的别名:

(env)$ ls env
bin  include  lib  local  pyvenv.cfg
(env)$ ls env/bin
activate  pydoc  python  python3  python3.3
(env)$ ls env/local/bin
easy_install  easy_install-3.3  pip  pip-3.3
(env)$ which easy_install
/usr/bin/easy_install
(env)$ which pip
/usr/bin/pip

我相信这与 Python 2.x 的行为背道而驰。在这一点上,我希望easy_installpip正在使用 virtualenv 的副本,并且使用它们来安装鸡蛋会将它们放入 virtualenv 中。

更进一步,我打开 env/bin/activate 发现 env/bin 被附加到系统路径,但 env/local/bin 不是。这解释了我所看到的行为。我可以通过编辑 env/bin/activate 以将 env/local/bin 目录添加到路径来解决此问题,例如:

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
PATH="$VIRTUAL_ENV/local/bin:$PATH"  # my new line
export PATH

那么,这里发生了什么?这是一个错误,还是我错过了什么?

我在 Ubuntu 12.10 上,以防万一。

4

3 回答 3

2

我感觉 Ubuntu 的 python 包中存在错误或在某个地方分发……但我没有追踪它(我不确定我是否关心)。

无论出于何种原因,都需要将 VIRTUAL_ENV 环境变量设置为 virtualenv 的根目录,以便分发和 pip 正确安装。

这个要点取自 Python 3 文档中的 Vinay Sajip 的代码示例,设置了所述变量;使用它时,distribute 和 pip 都会正确安装。

于 2013-06-06T10:52:38.467 回答
1

它在 python 文档中。

'/usr/local' 是默认的exec_prefix。阅读venv 文档以了解如何更改默认行为的详细信息。那里甚至还有一个示例,展示了如何制作一个venv.EnvBuilder为您安装分发和 pip 的示例。

如果您找到分发文档,请告诉我 ;-)

于 2013-03-22T08:53:35.733 回答
0

我有同样的问题。在activate脚本文件中,我需要添加为第一行(当然之后#!...):

 unset PYTHON_PATH
于 2013-03-20T16:07:41.517 回答