Python virtualenv --system-site-packages - 意外的pip行为

时间:2012-09-26 01:43:57

标签: python virtualenv pip virtualenvwrapper

我有许多python服务,每个都使用virtualenvs。我有时会重建这些环境,并希望节省时间。 mkvirtualenv --system-site-packages似乎接近我想要的,但它仍然有我不理解的行为。

我使用的一个软件包是gevent(测试版),我直接从GitHub安装:sudo pip install -e git://github.com/surfly/gevent.git@1.0b4#egg=gevent。这是在virtualenv之外完成的,因此它会进入系统的site-packages。这很好用,如果我用--system-site-packages创建一个新的virtualenv,它似乎存在,但指定了不同的rev和egg:

[msherry@hostname:~]$ mkvirtualenv test --system-site-packages
New python executable in test/bin/python2.7
Also creating executable in test/bin/python
Installing setuptools............done.
Installing pip...............done.
[msherry@hostname:~]$ workon test
[msherry@hostname:~]$ pip freeze|grep gevent
-e git://github.com/surfly/gevent.git@15418fc8ff4460069cf42b4b0341969c54455ddd#egg=gevent-dev

至少看起来已经安装了。但是,当我运行pip install -e git://github.com/surfly/gevent.git@1.0b4#egg=gevent时,gevent的(缓慢)安装过程再次开始 - 看起来我使用--system-site-packages没有任何收获。

理想情况下,我想请注意我正在请求的gevent版本已经存在,而不是尝试再次安装它。有没有办法做我正在尝试的事情?

1 个答案:

答案 0 :(得分:0)

在系统范围内安装时,请尝试稍微不同的语法。

sudo pip install git+git://github.com/surfly/gevent.git@1.0b4#egg=gevent

除了-e之外,这几乎与您的相同,并且在您的网址中包含<vcs>前缀。没有这个,pip说

AssertionError: Sorry, 'git://github.com/surfly/gevent.git' is a malformed VCS url. The format is <vcs>+<protocol>://<url>, e.g. svn+http://myrepo/svn/MyApp#egg=MyApp

我也注意到你通过pip在“可编辑的”中安装软件包时所做的事情。 mode:我得到了提交哈希版本,就像你对pip freeze | grep gevent

的输出一样

-e git://github.com/surfly/gevent.git@15418fc8ff4460069cf42b4b0341969c54455ddd#egg=gevent-dev

对应that version of gevent