2014-12-15 13 views
12

od czasu do czasu natknąć sytuacji gdzie mam pakiet, który może zależeć od każdej paczki A lub B.Python któregokolwiek z wieloma zależnościami

Na przykład, mój projekt zależy od pakietu zwanego spam, jeśli to nazwa projektu została zmieniona na pyspam, mój projekt może być zależny od spam lub pyspam.

Nie mogę znaleźć (lub znaleźć) sposobu zdefiniowania takich zależności w pliku setup.py. Jaki jest powszechnie akceptowany sposób rozwiązania tego problemu?

EDYCJA: Chciałbym zdefiniować zależności w setup.py. Coś takiego:

from setuptools import setup 

setup(
    name='myproject', 
    install_requires=[ 
     'spam || pyspam' 
    ] 
) 

Odpowiedz

-3
try: 
    import ham 
except ImportError: 
    import spam 
2

Można sprawdzić, czy pakiet jest dostępny, i zdecydować, które do korzystania na podstawie tego. (Mam nadzieję, że dobrze zrozumiałem twoje pytanie).

from setuptools import setup 

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

setup(
    name='myproject', 
    install_requires=[imp_spam] 
) 
+1

Nie dokładnie to, czego szukam. Jeśli żaden pakiet nie jest zainstalowany, 'pyspam' jest zainstalowany w twoim przykładzie. Niestety nie ma obsługi scenariuszy, w których którykolwiek pakiet może nie istnieć (zdalnie). W takim przypadku zależność może służyć jako zabezpieczenie. Ta odpowiedź prawdopodobnie będzie działać w większości przypadków, więc +1. – siebz0r

+0

Cóż, musisz zdefiniować jeden z nich jako preferowany, prawda? Wystarczy odwrócić kolejność, aby druga była preferowana, na wypadek, gdyby oba zostały pominięte. – bosnjak

+0

Jeśli pakiet nie (jeszcze) istnieje na serwerze pypi, instalacja nie powiedzie się. Zamiast tego powinien spróbować pobrać inny pakiet, ponieważ również spełnia zależność. – siebz0r

Powiązane problemy