Downloading/unpacking Django==1.4.5 (from -r requirements.pip (line 1))
Exception:
Traceback (most recent call last):
File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/basecommand.py", line 107, in main
status = self.run(options, args)
File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/commands/install.py", line 256, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1018, in prepare_files
self.unpack_url(url, location, self.is_download)
File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1142, in unpack_url
retval = unpack_http_url(link, location, self.download_cache, self.download_dir)
File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/download.py", line 463, in unpack_http_url
download_hash = _download_url(resp, link, temp_location)
File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/download.py", line 380, in _download_url
chunk = resp.read(4096)
File "/usr/lib64/python2.6/socket.py", line 353, in read
data = self._sock.recv(left)
File "/usr/lib64/python2.6/httplib.py", line 538, in read
s = self.fp.read(amt)
File "/usr/lib64/python2.6/socket.py", line 353, in read
data = self._sock.recv(left)
timeout: timed out
我知道Pip的
--use-mirrors
标志,有时我的团队成员会通过使用--index-url http://f.pypi.python.org/simple
(或其他镜像)来解决问题,直到他们找到一个能够及时响应的镜像。我们在英国,但在德国有一个PyPI镜像,并且我们没有从其他网站下载数据的问题。因此,我正在寻找为我们团队内部镜像PyPI的方法。
我看过的选项是:
运行自己的PyPI实例。有官方的PyPI实现:CheeseShop以及几个第三方实现,例如:djangopypi和pypiserver(见脚注)。
这种方法的问题在于我不需要完整的PyPI功能和文件上传,我只想要镜像它提供的内容。
使用pep381client或pypi-mirror运行PyPI镜像。
看起来这个方法可能可行,但是需要我的镜像先从PyPI下载所有东西。我已经设置了一个pep381client的测试实例,但我的下载速度在5 Kb/s到200 Kb/s之间变化(位,不是字节)。除非有完整的PyPI存档副本,否则我需要几周时间才能拥有一个有用的镜像。
使用PyPI轮询代理,例如yopypi。
现在这个方法已经无关紧要了,因为http://pypi.python.org本身由几个地理位置不同的服务器组成。
在开发者之间复制virtualenv,或者托管当前项目依赖项的文件夹。
这种方法不可扩展:我们有几个不同的Python项目,其依赖关系会随时间(缓慢)变化。只要任何项目的依赖关系发生变化,就必须更新这个中央文件夹以添加新的依赖项。复制virtualenv比复制包更糟糕,因为任何带有C模块的Python包都需要为目标系统编译。我们的团队既有Linux用户也有OS X用户。
(这仍然看起来是一堆糟糕方案中最好的选择。)
使用智能PyPI缓存代理:collective.eggproxy
这似乎是一个非常好的解决方案,但PyPI上的最后版本日期为2009年,并且讨论了mod_python。
其他大型Python团队都做些什么?快速安装相同的Python包集的最佳解决方案是什么?
脚注:
- 我看到过这个问题:如何创建自己的PyPI?,但那个问题涉及私有代码托管。
- Python维基列出了替代PyPI实现
- 我最近还发现了Crate.io,但我不认为在使用Pip时它会对我有帮助。
- 有一个网站监控PyPI镜像状态
- PyPI上的某些软件包文件托管在其他地方,因此即使是完美的镜像也无法帮助所有依赖项。