当前位置: 首页 > 面试题库 >

PyPI很慢。如何运行自己的服务器?

齐乐逸
2023-03-14
问题内容

当新的开发人员加入团队或Jenkins运行完整的构建时,我需要创建一个新的virtualenv。我经常发现,使用Pip和大量(超过10个)需求设置virtualenv需要很长时间才能安装PyPI中的所有内容。通常,它完全失败:

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的方法。

我看过的选项是:

  1. 运行我自己的PyPI实例。有官方的PyPI实施:CheeseShop以及几个第三方实施,例如:djangopypi和pypiserver(请参见脚注)

这种方法的问题在于我对文件上传的完整PyPI功能不感兴趣,我只想镜像它提供的内容。

  1. 使用pep381client或pypi-mirror运行PyPI镜像。

看起来它可以工作,但是需要我的镜像首先从PyPI下载所有内容。我已经设置了pep381client的测试实例,但是我的下载速度在5 Kb / s和200
Kb / s之间变化(位,而不是字节)。除非某个地方有完整的PyPI档案的副本,否则要花几周才能拥有一个有用的镜像。

  1. 使用PyPI轮询代理,例如yopypi。

现在,http :
//pypi.python.org本身由几个地理上不同的服务器组成,这是无关紧要的。

  1. 在开发人员之间围绕virtualenv复制,或托管当前项目依赖项的文件夹。

这不能扩展:我们有几个不同的Python项目,它们的依赖关系随时间变化(缓慢)。一旦任何项目的依赖关系发生更改,就必须更新此中央文件夹以添加新的依赖关系。但是,复制virtualenv比复制软件包更糟糕,因为任何带有C模块的Python软件包都需要针对目标系统进行编译。我们的团队同时拥有Linux和OS
X用户。

(这似乎仍然是坏一堆的最佳选择。)

  1. 使用智能PyPI缓存代理:collection.eggproxy

这似乎是一个很好的解决方案,但是PyPI的最新版本是2009年,讨论了mod_python。

其他大型Python团队做什么?快速安装同一组python软件包的最佳解决方案是什么?

脚注:

  • Python Wiki列出了其他PyPI实现
  • 我最近还发现了Crate.io,但我认为使用Pip不会对我有帮助。
  • 有一个网站监视PyPI镜像状态
  • PyPI上的某些软件包的文件托管在其他位置,因此即使是完美的镜像也无法帮助所有依赖项

问题答案:

您有共享的文件系统吗?

因为我会使用pip的缓存设置。很简单 例如,在/ mnt中创建一个名为pip-cache的文件夹。

mkdir /mnt/pip-cache

然后,每个开发人员都将以下行放入他们的pip配置中(unix = $ HOME / .pip / pip.conf,win =%HOME%\ pip \
pip.ini)

[global]
download-cache = /mnt/pip-cache

它仍然检查PyPi,寻找最新版本。然后检查该版本是否在缓存中。如果是这样,它将从那里安装。如果没有下载。将其存储在缓存中并安装。因此,每个软件包每个新版本只能下载一次。



 类似资料:
  • 当一个新的开发人员加入团队,或者Jenkins运行一个完整的构建时,我需要创建一个新的virtualenv。我经常发现,用Pip和大量(超过10个)的需求建立一个virtualenv需要很长时间才能安装PyPI中的所有内容。通常,它会完全失败: 我知道Pip的标志,有时我的团队成员会使用(或另一个镜像),直到他们有一个及时响应的镜像。我们在英国,但德国有一个PyPI镜像,我们从其他网站下载数据没有

  • 问题内容: 我想运行自己的内部pypi服务器,以便在组织内分发鸡蛋。 我发现了一些项目,例如: http://pypi.python.org/pypi/EggBasket/ http://plone.org/products/plonesoftwarecenter 据我了解,pypi.python.org使用名为Cheese Shop的软件。 我的问题: 为什么我不能使用奶酪店本身?(我找不到它,

  • 我已经使用了ffmpeg和mp4box来获取必要的文件,就像公会制作自己的简单MPEG-DASH服务器一样。然后,我将所有文件(包括MPD和短划线段)放入我的http服务器文件夹(我使用的是nginx,文件夹是**/wwwroot/default/)。 但我无法通过akamai player或dash if reference player等播放器播放我的视频。url是正确的,因为我可以直接使用“

  • 好吧,首先,我想让你们知道,我已经一年多没有使用python了,所以如果答案很明显,我只是愚蠢,那么请原谅我的无知哈哈。 接下来,我正在创建一个太空入侵者类型的游戏,除了从主屏幕切换到游戏屏幕外,一切都进行得很顺利。这可能只是我用来改变屏幕的方法,但我以前在其他程序中使用过这种方法,从来没有出现过任何问题。或者可能只是试图同时运行太多进程。不管怎样,我找不到任何类似的问题,所以我求助于寻求帮助。

  • 我创建了本地pypi服务器。我上传了我的项目需要的软件包,但是当尝试执行

  • 我只想运行一个Web项目,已在maven项目中配置了pom.xml.它使用maven tomcat7-maven-plugin部署Web应用程序工件,此时一切正常。 现在我想添加自己的服务器。xml和tomcat用户。tomcat配置中的xml。我读到我需要添加以下几行。 这很好。它现在正在工作,tomcat是使用上面的配置文件部署的,但问题是 我使用这个配置。 但是tomcat开始部署webap

  • 获取未定义id的错误。如果我使用,它工作得很好。这是客户端代码: 下面是我自己的代码: 我做错了什么? 如果我使用以下代码:

  • 我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始: 但MySQL服务不会自动启动,我必须手动运行(从容器内): 如何在运行docker容器时自动启动MySQL服务?