我正在尝试使用
setup.py
在 virtualenv
中使用 Python 2.7
安装 python 包。要求是包,它的依赖项应该放在 virtualenv
路径的 site-package 文件夹中。
所以我激活了
virtualenv
并去了setup.py
所在的位置。但是当我运行 python setup.py install
时,包及其依赖项会安装在系统 python 站点包中。
为了将它安装在 virtualenv 中,我必须像
<virtualenv path>/bin/python setup.py install
一样在 virtualenv 中指定 python 的位置。鉴于 virtualenv 已经激活,这对我来说看起来很奇怪。这是在 virtualenv 中使用 setup.py 的正确安装方式吗?如果是那么为什么?如果不是,正确的做法是什么?
编辑:
我运行了
which python
,它指向了 python 在 virtualenv 中的位置。
我用的是centos 6机器
Virtualenv 可能会将其站点包目录链接到全局站点包。从手册页(我的是 1.5.2):
--no-site-packages Don't give access to the global site-packages dir
to the virtual environment
在 1.5.2 版本中,此链接是默认的,您需要在创建环境时另外指定。在未来的版本中,此行为已切换,因此 NOT 链接是默认行为。
可以通过
<environment>/lib/python<ver>/no-global-site-packages.txt
文件是否存在来判断是否链接。如果这 not 存在,您的站点包 链接,这意味着 virtualenv 将安装并使用全局站点包,而不是像您预期的那样创建自己的副本。不幸的是,事后没有办法改变这一点。这次您需要使用 --no-site-packages
选项重新创建 virtualenv。
如果你按照 setup.py 上的 py2.7 教程, 你会用
from distutils.core import setup
在我的 virtualenv(CENTOS 6.0 和 --no-site-packages 处于活动状态)中,它会产生同样的问题。
相反,如果你使用
from setuptools import setup
有效。
不知道为什么。希望有人能指出来。