我正在使用buildout自动下载和设置我的 Plone 安装的许多依赖项。buildout 或多或少使用 easy_install 来下载和安装一堆 Python 鸡蛋。这通常有效,但如果无法下载任何依赖项,或者我希望构建找到不适合 pypi 的内部包,则它不起作用。如何设置我自己的本地版本的 pypi 来自动镜像我需要的包?对于使用 pypi 作为元数据但不使用代码的软件包,它是否仍会依赖第三方服务器?
7 回答
以下是有关如何设置自己的 PyPi 镜像的说明。这个项目的主页在这里。那里似乎也有越来越多的镜子。
有关如何设置自己的包索引的说明,请查看此博客文章,其中最后解释了一种解决方案。然后你也可以在那里托管你自己的内部包。优点还在于版本是这样固定的。(有关在构建中直接固定版本的方法,请查看这篇文章)。
如果 PyPI 上只有元数据并且存档存储在其他地方,您当然也可以将其复制到您的索引中。如果您只使用 PyPI 镜像,我假设您仍然需要访问这些服务器。
您也可以使用镜子。把它放在“~/.pip/pip.conf”的“[global]”部分:
index-url = http://d.pypi.python.org/simple/
这是此处宣布的最新功能。
这个页面展示了如何使用@moraes 帖子中提到的备用镜像,但对于 easy_install、buildout 和 virtualenv 以及 pip:
在 zc.buildout 的情况下:使用其本地下载缓存功能。缓存主要有三样东西:
- 外部扩展,即http://dist.plone.org/release/4.1.2/versions.cfg
- 来自一些 distserver 的鸡蛋,即 pypi
- 使用 zc.buildout 提供的下载基础设施从 zc.recipe.cmmi 或类似配方下载
对于所有这三个,我们需要调整全局配置并为扩展设置一个缓存文件夹,并为鸡蛋和其他下载设置一个缓存文件夹。
在您的主文件夹中创建一个.buildout
文件夹。
在此文件夹中创建文件夹extends-cache
和downloads
在.buildout
创建文件 default.cfg 时:
[buildout]
extends-cache = /home/USERNAME/.buildout/extends-cache
download-cache = /home/USERNAME/.buildout/downloads
所以你有了:
.buildout/
├── default.cfg
├── downloads
└── extends-cache
就是这样。确保不要在您的特定构建中覆盖 default.cfg 中的这两个变量。在第一次成功运行 buildout 后,后续运行将在离线模式下运行./bin/buildout -o
。
作为副作用,如果在离线模式下使用构建会更快,即当没有新下载但某些配置发生更改时
除此之外,运行自己的 pypi-mirror 是有意义的。作为另一个信息来源,您可能会对我前段时间写的关于这个主题的文章感兴趣:http: //bluedynamics.com/articles/jens/setup-z3c.pypimirror
配置index
,buildout.cfg
例如
[buildout]
index = http://a.pypi.python.org/
find-links =
更多镜像: http: //www.pypi-mirrors.org/
PyPI 自 2010 年年中以来就有镜像http://pypi.python.org/mirrors
对于您virtualenv
通常需要通过一个requirements.txt
(或可能单独)安装的软件包,您必须覆盖您的pip.conf
文件,通常位于~/.pip/pip.conf
在您的pip.conf
文件中:
[global]
index-url=https://pypi.python.org/simple/
[install]
trusted-host=pypi.python.org
如果需要,您可以在此处提供您自己的自定义 pypi 版本的 url。
virtualenv
如果您希望在通过创建时还使用另一个 pypi 服务器,则easy_install
需要覆盖pydistutils.cfg
通常位于的文件~/pydistutils.cfg
在pydistutils.cfg
文件中:
[easy_install]
index-url=https://pypi.python.org/simple/
这将确保venv
使用pydistutils.cfg
. 在这里,我们告诉easy_install
使用https://pypi.python.org/simple/来创建venvs
.