4

我正在开发一个本身并不复杂的系统:只是一个带有一组包的 virtualenv,每个包都有自己的依赖项。总而言之(带有依赖项),大约需要安装 30 个包。

以下约束使设置有些复杂:

  • 不保证可以访问互联网。事实上,我们假设 PyPI 在安装时不可用。(一个非网络的 debian 稳定存储库可用,它允许 virtualenv 和 company)
  • 一些包/依赖项具有对应用程序性能至关重要的 C 扩展。
  • 最好提前编译好C扩展,避免安装GCC和公司。

在这些限制条件下,打包(然后安装)python 模块依赖项的最快、最简单甚至(最好)“正确”方式是什么?我是否只是获取每个包的源并自己 bdist ?

4

3 回答 3

5

这个问题有点老了,但无论如何,从pip 1.4 版(2013-07-23)开始,wheel 已经被支持为二进制分发格式,具有更丰富的接口和更好的支持。对于那些找到这个线程的人,考虑使用轮子而不是鸡蛋。

示例用法(来自 wheel 文档):

为您的需求及其所有依赖项构建轮子到本地目录:

pip install wheel
pip wheel --wheel-dir=/local/wheels -r requirements.txt

然后仅使用您的本地车轮目录(而不是来自 PyPI)安装这些要求:

pip install --no-index --find-links=/local/wheels -r requirements.txt
于 2015-04-30T17:15:35.613 回答
1

pip--find-links选项支持本地目录。只需将所有 sdist 和 egg 发行版放入一个目录,pip 就会在那里找到它们。

二进制发行版,我将其构建为鸡蛋(带有setup.py bdist_egg),以便于安装而无需编译。

于 2012-09-25T19:43:45.743 回答
0

我现在确定的方法是这样的:

# To gather together all of the dependencies (ex: pymongo, ujson):
easy_install -zmaxd /my/packaging/directory pymongo>=2.3 ujson

# Secondarily, package my custom module
/mymodule/setup.py sdist
cp /mymodule/dist/mymodule.tar /my/packaging/directory/

后来由于世界上大部分版本的pip都不支持eggs,所以也使用easy_install安装。(最近版本的 pip 可以,我理解,但不是每个人都是最新的):

easy_install -H None -f file:///installed/packaging/directory mymodule

mymodule 的依赖项仍在查看这是否有效,但它似乎接近“正确”的做事方式。

感谢 Martijn 将我指向鸡蛋。

于 2012-09-26T16:55:22.653 回答