2014-12-15 22 views
12

Di tanto in tanto mi imbatto in un situazione in cui ho un pacchetto che può dipendere sia pacchetto A o B.Python una delle molte dipendenze

Per esempio, il mio progetto dipende da un pacchetto chiamato spam, se questo progetto è stato rinominato in pyspam, il mio progetto può dipendere da spam o pyspam.

Non riesco a capire (o trovare) come definirei tali dipendenze in setup.py. Qual è un modo comunemente accettato per risolvere questo?

MODIFICA: Vorrei definire le dipendenze in setup.py. Qualcosa di simile a questo:

from setuptools import setup 

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

risposta

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

È possibile controllare per vedere se il pacchetto è disponibile, e decidere quale utilizzare in base a questo. (Spero di aver capito correttamente la tua domanda).

from setuptools import setup 

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

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

Non esattamente quello che sto cercando. Se nessun pacchetto è installato, nel tuo esempio è installato 'pyspam'. Sfortunatamente non vi è alcuna gestione degli scenari in cui entrambi i pacchetti potrebbero non esistere (da remoto). In tal caso, una dipendenza può servire da ripiego. Questa risposta probabilmente funzionerà nella maggior parte dei casi, quindi +1. – siebz0r

+0

Beh, devi definirne uno preferito, giusto? Basta invertire l'ordine per rendere l'altro preferito nel caso in cui entrambi mancano. – bosnjak

+0

Se un pacchetto non esiste (ancora) su un server Pypi, l'installazione non riesce. Invece dovrebbe provare a recuperare l'altro pacchetto in quanto soddisfa anche la dipendenza. – siebz0r

Problemi correlati