我正在开发一个本身并不复杂的系统:只是一个带有一系列包的virtualenv,每个包都有自己的依赖。所有告诉(有依赖),需要安装大约30个包。
以下限制使设置有些复杂化:
在这些约束中,包装(然后安装)python模块依赖项的最快,最简单甚至(最好)“正确”的方法是什么?我是否只抓住每个包的来源并自己做一次?
答案 0 :(得分:5)
这个问题有点陈旧,但无论如何,自pip版本1.4(2013-07-23)以来,已经支持wheel作为二进制分发格式,具有更丰富的界面和更好的支持。对于那些找到这个主题的人,考虑使用wheel而不是egg。
示例用法(来自车轮文档):
为您的需求及其所有依赖项构建轮子 本地目录:
pip install wheel pip wheel --wheel-dir=/local/wheels -r requirements.txt
然后只使用本地目录安装这些要求 轮子(而不是来自PyPI):
pip install --no-index --find-links=/local/wheels -r requirements.txt
答案 1 :(得分:1)
pip --find-links
选项支持本地目录。只需将所有sdist和egg发行版放入一个目录中,pip就会在那里找到它们。
二进制发行版,我将构建为egg(带setup.py bdist_egg
),以便于安装而无需编译。
答案 2 :(得分:0)
我现在确定的方法是this:
# 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不支持egg,所以也可以使用easy_install进行安装。 (pip的最新版本,我理解,但不是每个人都是最新的):
easy_install -H None -f file:///installed/packaging/directory mymodule
mymodule的依赖关系仍然看看它是否有效,但似乎接近于“正确”的做事方式。
感谢Martijn指点我的鸡蛋。