Ответ 1
Комментарий Богдана помог мне указать на мой путь. Я думал, что опубликую то, что я сделал, если у кого-то еще есть моя проблема.
Для примера в вопросе я сделал именно то, что предложил Богдан:
setup.py
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,
]
)
Тем не менее, у этой проблемы все еще есть проблема зависимостей pip-style для Travis и tox
(я не уверен, почему, учитывая второй комментарий Богдана). Чтобы обойти эту проблему, я создал два дополнительных файла требований, как показано ниже:
Требования-py2.txt
dnspython>=1.10.0
Требования-py3.txt
dnspython3>=1.10.0
Затем для Трэвиса я использовал некоторые переменные среды, которые я почерпнул из торнадо. Travis.yml:
.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
я должен был использовать довольно хакерский метод использования этих файлов с несколькими требованиями.
tox.ini
[testenv:py27]
deps = -rrequirements-py2.txt
[testenv:py33]
deps = -rrequirements-py3.txt