Some Python packages require one of two packages as a dependency. For example,
Currently neither pip's
requirement.txt nor setuptools directly allow such a construction. Both require you to specify a list of requirements. You can restrict the version of a requirement, but that's all.
Inside Python, you can handle this situation as follows:
try: import dependency1 def do_it(x): return dependency1.some_function(x) except ImportError: try: import dependency2 def do_it(x) return dependency2.another_function(x) except ImportError: raise ImportError('You must install either dependency1 or ' + 'dependecy2!')
do_it uses either
dependency2.another_function, depending on which is available.
That will still leave you with the problem of how to specify your requirements. I see two options:
setup.pybut document that the user needs to install one of the dependencies. This approach might be OK if the setup of your software requires additional manual steps anyway (i.e. more than just
pip install my_tool).
In the end, you have to ask yourself why people might want to use one dependency over the other: I usually couldn't care less about the dependencies of the libraries that I use, because (disk) space is cheap and (due to virtualenv) there is little risk of incompatibilities. I'd therefore even suggest you think about not supporting two different dependencies for the same functionality.