requirements.txt取决于python版本
我试图移植一个python2包到python3(不是我自己的)使用六个,以便它与两个兼容。 然而,其中一个在requirements.txt中列出的软件包现在包含在python3 stdlib中,而pypi版本在python3中不起作用,所以我想有条件地排除它。 在setup.py中做这件事很简单,我可以做一些事情:
if sys.version_info[0] == 2: requirements += py2_requirements else: requirements += py3_requirements
但是我想要requirements.txt也反映正确的列表。 在pip文档中我找不到任何这方面的内容。 所以有人知道如何去做,或者甚至有可能吗?
自pip 6.0
以来,您可以使用环境标记在requirements.txt
实现此目的:
SomeProject==5.4; python_version < '2.7' SomeProject; sys.platform == 'win32'
它也通过在setup.py
声明额外的需求来支持setuptools:
setup( ... install_requires=[ 'six', 'humanize', ], extras_require={ ':python_version == "2.7"': [ 'ipaddress', ], }, )
另见需求说明符 。
您可以创build多个需求文件,将这些常用软件包放在一个公共文件中,并使用-r file_path
将其包含在另一个pip需求文件中
requirements/ base.txt python2.txt python3.txt
python2.txt:
-r base.txt Django==1.4 #python2 only packages
python3.txt:
-r base.txt Django==1.5 #python3 only packages
pip install -r requirements / python2.txt
我不认为这是可能的,因为requirements.txt文件只是一个文本文件。 我能想到的最接近的情况是在requirements.txt中注释掉上面的注释,声明它应该为python2.6安装。 也许值得添加一些代码来检查python版本?
import sys if sys.version_info.major == 2: try: import blah except ImportError: sys.stderr.write("Yo, pip install blah") sys.exit(1)
看我的回答https://stackoverflow.com/a/25078063/302521和这个脚本:; https : //gist.github.com/pombredanne/72130ee6f202e89c13bb