在发布支持Python 2和3的Python egg时,您是否可以指定根据您使用的版本而更改的依赖项?例如,如果对Python 2使用dnspython
,则会有一个名为dnspython3
的Python 3版本。
你能编写setuptools.setup()
函数,这样你的鸡蛋可用于两个版本,如果这是唯一的障碍,即,如果你已经运行2to3
以确保你的其余部分library与这两个版本兼容。
我查看过这些文件似乎找不到这个问题的答案:
答案 0 :(得分:19)
波格丹的评论帮助我指明了方向。我以为我会发布我所做的事情以防其他人遇到我的问题。
对于问题中的例子,我完全按照波格丹的建议行事:
import sys
if sys.version_info[0] == 2:
dnspython = "dnspython"
elif sys.version_info[0] == 3:
dnspython = "dnspython3"
setup(
... <snip> ...
install_requires=[
"%s >= 1.10.0" % dnspython,
]
)
然而,这仍然存在Travis和tox
的pip风格依赖问题(鉴于Bogdan的第二条评论,我不知道为什么)。为了解决这个问题,我创建了两个额外的需求文件,如下所示:
dnspython>=1.10.0
dnspython3>=1.10.0
然后对于Travis,我使用了一些我从tornado .travis.yml收集到的环境变量:
install:
- if [[ $TRAVIS_PYTHON_VERSION == 2* ]]; then pip install -r requirements-py2.txt --use-mirrors; fi
- if [[ $TRAVIS_PYTHON_VERSION == 3* ]]; then pip install -r requirements-py3.txt --use-mirrors; fi
最后,对于tox
,我不得不使用一种相当hackish的方法来使用这些多个需求文件。
[testenv:py27]
deps = -rrequirements-py2.txt
[testenv:py33]
deps = -rrequirements-py3.txt
答案 1 :(得分:3)
@Harold回答的setup.py部分对我不起作用:pip install distribution.whl仍然会安装if代码说不应该的依赖项。我将在解决此问题后的几天内进一步更新此答案。
以下是一些可能提供其他方法来处理此问题的链接:(
)答案 2 :(得分:1)
对于大多数相关但不完全相关的内容,请参阅我的回答https://stackoverflow.com/a/25078063/302521和此脚本:https://gist.github.com/pombredanne/72130ee6f202e89c13bb