假设我有一堆需求文件,例如:
requirements.txt # common for both 2.x and 3.x
requirements-2.txt # 2.x
requirements-3.txt # 3.x
我想根据当前的 Python 解释器版本install_requires
在文件中填充参数。setup.py
当然假设pip处理安装过程。
解决方案 1:当然,我可以编写一个简单的函数来读取并返回正确的需求。在有多个项目的情况下,这显然是不可接受的,因为我必须在任何地方复制该函数。
解决方案 2:这里的下一个想法是编写一个简单的包来为我完成它,但问题是它不仅应该在分发时可用(如python setup.py sdist
),更重要的是,在安装时在自己的机器上可用。
我设法编写了一个简单的模块来做这件事,让我们称之为depmodule
。我还有以下内容setup.py
:
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
try:
from depmodule import find_requirements
except ImportError:
# this line is executed when reading setup.py for the first time
# since depmodule is not installed yet
find_requirements = lambda: []
setup(
name='some-package',
packages=find_packages(),
# snip...
platforms='any',
# note that depmodule is listed here as a requirement, so it will be
# installed before some-package, thus will be available when it comes
# to running setup.py of some-package
install_requires=['depmodule'] + find_requirements(),
)
当涉及到它时,pip install some-package
它实际上正确地解决了依赖关系,但它们并没有被 pip 拾取,所以它只安装:(depmodule some-package
按那个顺序)而不是depmodule dep1 dep2 ... some-package
.
我试图使用setup_requires
论点,但没有运气。依赖项已下载,但我无法访问它,因为它是一个鸡蛋包(未提取)。
有什么办法可以克服这个问题吗?是否有任何替代方案(其他方法)可以帮助解决这个问题?
谢谢!