2010-06-03 7 views
13

मैं एक छोटी पाइथन परियोजना को ज़िप या अंडा फ़ाइल के रूप में पैकेज करने पर काम कर रहा हूं ताकि इसे वितरित किया जा सके। मैं प्रोजेक्ट की कॉन्फ़िगरेशन फ़ाइलों को शामिल करने के 2 तरीकों से आया हूं, जिनमें से दोनों समान परिणाम उत्पन्न करते हैं।पाइथन वितरण में फ़ाइलों को शामिल करने के लिए 2 तकनीकें: जो बेहतर है?

विधि 1:

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'], 
     data_files = [('config', ['config\propFiles1.ini', 
           'config\propFiles2.ini', 
           'config\propFiles3.ini'])] 
    ) 

विधि 2:

setup.py में इस कोड को शामिल करें

from distutils.core import setup 

setup(name='ProjectName', 
     version='1.0', 
     packages=['somePackage'] 
    ) 
:

setup.py में इस कोड को शामिल करें

फिर, इसमें इस पंक्ति के साथ एक MANIFEST.in फ़ाइल बनाएं:

include config\* 

क्या विधियों के बीच कोई अंतर है? किसको प्राथमिकता दी जाती है? मैं पहले की तरफ झुकता हूं क्योंकि तब कोई MANIFEST.in फ़ाइल जरूरी नहीं है। हालांकि, पहली विधि में आपको प्रत्येक फ़ाइल को अलग-अलग निर्दिष्ट करना होगा जबकि दूसरे में आप केवल संपूर्ण फ़ोल्डर शामिल कर सकते हैं। क्या मुझे कुछ और ध्यान में रखना चाहिए? मानक अभ्यास क्या है?

+0

नोट: पथ बनाने के लिए os.path.join का उपयोग करें; "\" का उपयोग विंडोज-विशिष्ट है। –

+9

आप सभी प्लेटफॉर्म पर '/' का भी उपयोग कर सकते हैं। ध्यान दें कि अगर आपके पास 'config \ notes.txt' जैसी फ़ाइल है जो \ n' एक नई लाइन में बदल जाएगी! आप बस भाग्यशाली हैं \ \' कुछ भी नहीं खड़े हैं। –

+0

@ इयान बाइकिंग - टिप के लिए धन्यवाद! मैंने उन सभी को – froadie

उत्तर

25

MANIFEST.in नियंत्रण करता है कि जब आप python setup.py sdist पर कॉल करते हैं तो वितरण ज़िप फ़ाइल में कौन सी फ़ाइलें डाल दी जाती हैं। यह नियंत्रण स्थापित है जो नियंत्रित करता है। data_files (या बेहतर package_data) नियंत्रित करता है कि कौन सी फाइलें इंस्टॉल की गई हैं (और मुझे लगता है कि यह भी सुनिश्चित करता है कि ज़िप फ़ाइल में फ़ाइलें शामिल हैं)। उन फ़ाइलों के लिए MANIFEST.in का उपयोग करें जिन्हें आप इंस्टॉल नहीं करेंगे, जैसे प्रलेखन, और package_data आपके द्वारा उपयोग की जाने वाली फ़ाइलों के लिए जो पाइथन कोड (छवि या टेम्पलेट की तरह नहीं) हैं।

+5

की देखभाल करने के लिए आर के साथ प्रीफ़िक्स किया है नोट करें कि डेटा_फाइल या पैकेज_डाटा में सूचीबद्ध फ़ाइलों को स्वचालित 2.7 रिलीज से पहले किसी भी पायथन संस्करण में एसडीआईस्ट में शामिल नहीं किया गया है (यह एक डिस्ट्यूटल्स बग है जो अंतिम के भीतर तय किया गया था रिलीज चक्र)। तो वास्तव में, वर्तमान में जारी किए गए पायथन संस्करणों के लिए, यदि आपको फ़ाइलों को स्थापित करने की आवश्यकता है, तो आपको उन्हें डेटा_फाइल/पैकेज_डेटा और MANIFEST.in में दोनों सूचीबद्ध करना होगा। –

+1

मुझे नोटिस [3.2 डॉक्स] (http://docs.python.org/py3k/distutils/setupscript.html#distutils-additional-files) कहते हैं "3.1 में बदला गया: पैकेज_डेटा (या data_files) से मेल खाने वाली फाइलें स्वचालित रूप से डाल दी जाती हैं मैनिफ़ेस्ट, यदि कोई टेम्पलेट प्रदान नहीं किया गया है। " हालांकि, यह WinXP पर 3.2 पर मेरे लिए सच नहीं है: मुझे MANIFEST.in बनाकर उन्हें मैन्युअल रूप से वहां रखना होगा और उन्हें इसमें जोड़ना होगा। –

+1

यह अजीब बात है। क्या आप एक बग रिपोर्ट खोल सकते हैं? –

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

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