When releasing a Python egg with support for both Python 2 and 3, can you specify dependencies that change depending on which version you\'re using? For example, if you use
For something mostly related but not exactly to the point see my answer https://stackoverflow.com/a/25078063/302521 and this script: https://gist.github.com/pombredanne/72130ee6f202e89c13bb
Bogdan's comment helped point me on my way. I thought I'd post what I did in case anyone else has my problem.
For the example in the question, I did exactly what Bogdan suggested:
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,
]
)
However, this still has the issue of pip-style dependencies for Travis and tox
(I'm not sure why, given Bogdan's second comment). To work around this problem, I created two extra requirements files, as shown below:
dnspython>=1.10.0
dnspython3>=1.10.0
Then for Travis, I made use of some environment variables that I gleaned from the 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
Lastly, for tox
, I had to use a rather hackish method of using these multiple requirements files.
[testenv:py27]
deps = -rrequirements-py2.txt
[testenv:py33]
deps = -rrequirements-py3.txt
The setup.py portion of the answer by @Harold did not work for me: pip install distribution.whl still installs the dependency that the if code says it shouldn't. I will further update this answer in a few days when I have this issue resolved.
Here are some links that may provide additional ways to deal with this ():