我使用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,以防这会有所不同.

推荐答案

我感觉Ubuntu的python软件包或发行版中有一个bug……但我还没有找到它(我也不确定我是否愿意).

出于任何原因,需要将VIRTUAL_ENV环境变量设置为virtualenv的根,以便distribute和pip正确安装.

This gist,取自Python3文档中Vinay Sajip的代码示例,设置了上述变量;distribute和pip在使用时都会正确安装.

Python-3.x相关问答推荐

CONNEXION.EXCEPTIONS.ResolverError:运行pyz文件时未命名模块

正则表达式匹配并提取括号前的单词

Django内置注销视图`不允许的方法(GET):/USERS/LOGOUT/`

错误:无法为 pyconcorde 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

Sunburst 折线图可视化

将水平堆叠的数据排列成垂直

pytorch 中 mps 设备的 manual_seed

Python 3 - 给定未知数量的类别动态地将字典嵌套到列表中

如何使用 django rest 框架在 self forienkey 中删除多达 n 种类型的数据?

如何在python中将列表转换为其他格式

Python3 AttributeError:列表对象没有属性清除

如何从字典中打印特定键值?

Python3 mysqlclient-1.3.6(又名 PyMySQL)的用法?

__cause__ 和 __context__ 有什么区别?

为 True 相交两个布尔数组

在没有时间的python中创建日期

接收导入错误:没有名为 *** 的模块,但有 __init__.py

为什么 Python 不能识别我的 utf-8 编码源文件?

具有不均匀间隙的 Python 范围

python - Pandas - Dataframe.set_index - 如何保留旧的索引列