当一个新的开发人员加入团队,或者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的——使用镜像
标志,有时我的团队成员会使用——索引urlhttp://f.pypi.python.org/simple
(或另一个镜像),直到他们有一个及时响应的镜像。我们在英国,但德国有一个PyPI镜像,我们从其他网站下载数据没有问题。
所以,我正在寻找为我们的团队在内部镜像PyPI的方法。
我看到的选项有:
>
运行我自己的PyPI实例。有官方的PyPI实现:CheeseShop以及一些第三方实现,例如:djangopypi和pypiserver(见脚注)
这种方法的问题是,我对文件上传的完整PyPI功能不感兴趣,我只想镜像它提供的内容。
使用Pep381客户端或pypi镜像运行PyPI镜像。
这看起来是可行的,但需要我的镜像先从PyPI下载所有内容。我已经设置了pep381client的测试实例,但我的下载速度在5 Kb/s和200 Kb/s(位,而不是字节)之间变化。除非某个地方有完整的PyPI档案的副本,否则我需要几个星期才能得到一个有用的镜像。
使用PyPI循环代理,如yopypi。
这是无关紧要的,因为http://pypi.python.org它本身由几个地理位置不同的服务器组成。
在开发人员之间复制virtualenv,或托管当前项目依赖项的文件夹。
这不能扩展:我们有几个不同的Python项目,它们的依赖关系随着时间的推移而变化(缓慢)。一旦任何项目的依赖项更改,必须更新此中心文件夹以添加新的依赖项。然而,复制虚拟环境比复制包更糟糕,因为任何带有C模块的Python包都需要为目标系统编译。我们的团队有Linux和OS X用户。
这看起来仍然是一群坏人的最佳选择。)
使用智能PyPI缓存代理:集合。鸡蛋代理
这似乎是一个非常好的解决方案,但是PyPI的最后一个版本是2009年,讨论了mod_python。
其他大型Python团队做什么?快速安装同一套python软件包的最佳解决方案是什么?
脚注:
我最近将devpi安装到我的开发团队的Vagrant配置中,使其包缓存位于主机的文件系统上。这允许每个虚拟机拥有自己的devpi服务器守护进程,它将其用作virtualenv/pip的索引url。当虚拟机被销毁和重新配置时,软件包不必反复下载。每个开发人员下载它们一次,以便在主机文件系统上构建本地缓存。
我们还有一个用于我们的私有包的内部PyPi索引,它目前只是一个由Apache提供服务的目录。最终,我将把它转换成一个devpi代理服务器,这样我们的构建服务器除了托管我们的私有库之外,还将为我们的Python依赖项维护一个包缓存。这将在我们的开发环境、生产部署和公共PyPi之间创建一个额外的缓冲区。
这似乎是迄今为止我发现的针对这些需求的最健壮的解决方案。
虽然它不能解决您的PyPI问题,但将构建的虚拟环境交给开发人员(或部署)可以通过Terraria来完成。
使用terrarium打包、压缩和保存virtualenvs。您可以将它们存储在本地,甚至可以存储在S3上。从GitHub上的文档中:
$ pip install terrarium
$ terrarium --target testenv --storage-dir /mnt/storage install requirements.txt
构建一个新鲜的环境后,terraria会对环境进行存档和压缩,然后将其复制到存储-dir指定的位置。
在指定相同存储目录的相同需求集的后续安装中,terraria将从 /mnt/storage.复制并提取压缩归档
要准确显示terrarium将如何命名存档,可以运行以下命令:
$ terrarium key requirements.txt more_requirements.txt
x86_64-2.6-c33a239222ddb1f47fcff08f3ea1b5e1
你有一个共享的文件系统吗?
因为我会使用pip的缓存设置。这很简单。例如,在 /mnt中创建一个名为pip-ache的文件夹。
mkdir /mnt/pip-cache
然后,每个开发人员将在其pip配置中放入以下行(unix=$HOME/.pip/pip.conf,win=%HOME%\pip\pip.ini)
[global]
download-cache = /mnt/pip-cache
它仍然检查PyPi,寻找最新版本。然后检查该版本是否在缓存中。如果是这样,它将从那里安装。如果没有,它会下载它。将其存储在缓存中并安装。因此,每个包在每个新版本中只能下载一次。
问题内容: 我想运行自己的内部pypi服务器,以便在组织内分发鸡蛋。 我发现了一些项目,例如: http://pypi.python.org/pypi/EggBasket/ http://plone.org/products/plonesoftwarecenter 据我了解,pypi.python.org使用名为Cheese Shop的软件。 我的问题: 为什么我不能使用奶酪店本身?(我找不到它,
问题内容: (重要)编辑3: 单独运行testajax2.php而 不是 Ajax。持续时间大致相同,为1.02-1.03秒。所以我想这意味着问题出在PHP- MySQL或XAMPP中? 当我通过phpMyAdmin查询运行它时,结果如下:显示第0-29行(总计约50行。查询耗时 0.0015秒 )。看来问题根本不在于Ajax,而可能在于PHP。我怎样才能解决这个问题?(我也刚刚编辑了问题标题。)
我已经使用了ffmpeg和mp4box来获取必要的文件,就像公会制作自己的简单MPEG-DASH服务器一样。然后,我将所有文件(包括MPD和短划线段)放入我的http服务器文件夹(我使用的是nginx,文件夹是**/wwwroot/default/)。 但我无法通过akamai player或dash if reference player等播放器播放我的视频。url是正确的,因为我可以直接使用“
我只想运行一个Web项目,已在maven项目中配置了pom.xml.它使用maven tomcat7-maven-plugin部署Web应用程序工件,此时一切正常。 现在我想添加自己的服务器。xml和tomcat用户。tomcat配置中的xml。我读到我需要添加以下几行。 这很好。它现在正在工作,tomcat是使用上面的配置文件部署的,但问题是 我使用这个配置。 但是tomcat开始部署webap
问题内容: 刚开始在本地服务器上试用Flask时,我注意到请求/响应时间比我预期的要慢得多。 像下面这样的简单服务器需要近5秒钟才能响应。 有任何想法吗?还是这只是本地服务器的方式? 问题答案: 在支持ipv6并进行了配置的操作系统(例如现代Linux系统,OS X 10.4或更高版本以及Windows Vista)上,如果访问本地服务器,某些浏览器可能会非常缓慢。原因是有时ipv4和ipv6套接
获取未定义id的错误。如果我使用,它工作得很好。这是客户端代码: 下面是我自己的代码: 我做错了什么? 如果我使用以下代码: