2014-12-15 5 views
12

समय-समय पर मैं एक स्थिति है जहाँ मैं एक पैकेज है कि या तो पैकेज एक या बीअजगर कई निर्भरता

उदाहरण के लिए पर निर्भर कर सकता है के पार चलो के किसी भी, अपने प्रोजेक्ट एक पैकेज spam कहा जाता है पर, निर्भर करता है इस करता है, तो परियोजना का नाम बदलकर pyspam कर दिया गया है, मेरी परियोजना या तो spam या pyspam पर निर्भर कर सकती है।

मैं पता नहीं लगा सकता (या ढूंढ सकता हूं) मैं setup.py में ऐसी निर्भरताओं को कैसे परिभाषित करूंगा। इसे हल करने के लिए एक आम तौर पर स्वीकार्य तरीका क्या है?

संपादित करें: मैं setup.py में निर्भरताओं को परिभाषित करना चाहता हूं। कुछ इस तरह:

from setuptools import setup 

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

उत्तर

2

यदि पैकेज उपलब्ध है देखने के लिए जाँच कर सकते हैं और जो कि के आधार पर उपयोग करने का निर्णय। (मुझे उम्मीद है कि मैं आपका प्रश्न सही ढंग से समझ गया हूं)।

from setuptools import setup 

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

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

बिल्कुल वही नहीं जो मैं ढूंढ रहा हूं। यदि न तो पैकेज स्थापित है, तो आपके उदाहरण में 'pyspam' स्थापित है। दुर्भाग्य से परिदृश्यों का कोई संचालन नहीं है जहां पैकेज शायद मौजूद नहीं हो सकता है (दूरस्थ रूप से)। ऐसे मामले में एक निर्भरता फॉलबैक के रूप में काम कर सकती है। यह उत्तर शायद ज्यादातर मामलों में काम करेगा, इसलिए +1। – siebz0r

+0

ठीक है, आपको उनमें से एक को पसंदीदा व्यक्ति के रूप में परिभाषित करना है, है ना? बस गायब होने के मामले में दूसरे को पसंदीदा बनाने के लिए ऑर्डर को उलट दें। – bosnjak

+0

यदि कोई पैकेज एक पिपी सर्वर पर (अभी तक) मौजूद नहीं है, तो इंस्टॉल विफल हो जाता है। इसके बजाय इसे अन्य पैकेज लाने की कोशिश करनी चाहिए क्योंकि यह निर्भरता को भी संतुष्ट करता है। – siebz0r

संबंधित मुद्दे