Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python any of many dependencies

From time to time I come across a situation where I have a package that can depend on either package A or B.

For example, my project depends on a package called spam, if this project is renamed to pyspam, my project can either depend on spam or pyspam.

I cannot figure out (or find) how I would define such dependencies in setup.py. What is a commonly accepted way to solve this?

EDIT: I would like to define the dependencies in setup.py. Something like this:

from setuptools import setup

setup(
    name='myproject',
    install_requires=[
        'spam || pyspam'
    ]
)
like image 450
siebz0r Avatar asked Dec 15 '14 14:12

siebz0r


People also ask

How do I get all dependencies of a project in Python?

Use the pipdeptree utility to gather a list of all dependencies, create a requirements. txt file listing all the dependencies, and then download them with the pip download command. Get the list of dependencies for a package from the setup.py file.

How do I check Python package dependencies?

Instead, package dependencies can be seen using one of the following commands in Python: pip show: List dependencies of Python packages that have already been installed. pipdeptree: List the dependencies in a tree form. Pip list: List installed packages with various conditions.

How do you manage dependencies in Python?

Using venv and pipenv are two methods of managing dependencies in Python. They are simple to implement and, for most users, adequate solutions for handling multiple projects with different dependencies. However, they are not the only solutions. Other services can complement their use.


1 Answers

You can check to see if the package is available, and decide which to use based on that. (I hope I understood your question correctly).

from setuptools import setup

imp_spam = "spam"
try:
    import spam
except:
    imp_spam = "pyspam"

setup(
    name='myproject',
    install_requires=[imp_spam]
)
like image 175
bosnjak Avatar answered Sep 29 '22 11:09

bosnjak