क्या अजगर परियोजनाओं को एक MANIFEST.in की आवश्यकता है, और इसमें क्या होना चाहिए?


120

"पायथन डिस्ट्रिब्यूट" गाइड (python-distribute.org पर था, लेकिन उस पंजीकरण को समाप्त कर दिया गया है) मुझे doc/txtफ़ाइलों को शामिल करने के लिए कहता है और फ़ाइल .pyको MANIFEST.inफ़ाइल में बाहर रखा गया है

Sourcedist प्रलेखन मुझे केवल sdist का उपयोग करता है बताता है MANIFEST.inऔर केवल आपके द्वारा निर्दिष्ट और शामिल करने के लिए फाइल भी शामिल .pyफ़ाइलें। यह मुझे उपयोग करने के लिए भी कहता है: python setup.py sdist --manifest-onlyएक उत्पन्न करने के लिए MANIFEST, लेकिन अजगर मुझे बताता है कि यह मौजूद नहीं है

मैं सराहना करता हूं कि ये अजगर के विभिन्न संस्करणों से हैं और वितरण प्रणाली पूरी तरह से गड़बड़ी में है, लेकिन मुझे लगता है कि मैं अजगर 3 का उपयोग कर रहा हूं और setuptools(एक नया जिसमें वितरण शामिल है, लेकिन अब इसे सेटपूलट कहा जाता है, न कि पुराने सेटपूल जो केवल वितरण उपकरण के लिए पदावनत किए गए थे। बंटवारे में वापस लाने के लिए और नाम बदलने के लिए setuptools .....)

और मैं 'मानक' फ़ोल्डर संरचना और setup.pyफ़ाइल का अनुसरण कर रहा हूं ,

  1. क्या मुझे एक की आवश्यकता है MANIFEST.in?
  2. इसमें क्या होना चाहिए?
  3. इन सभी विभिन्न पैकेज प्रणालियों और विधियों को एक ही सरल प्रक्रिया में कब बनाया जाएगा?

जवाबों:


117

पुन: "क्या मुझे MANIFEST.in की आवश्यकता है?

नहीं, आपको उपयोग नहीं करना है MANIFEST.in। दोनों, distutilsऔर setuptoolsस्रोत वितरण पैकेज में शामिल सभी फाइलों में शामिल हैं setup.py- मॉड्यूल, पैकेज पायथन फाइलें, README.txtऔर test/test*.py। यदि यह सब आप वितरण पैकेज में रखना चाहते हैं, तो आपको उपयोग करने की आवश्यकता नहीं है MANIFEST.in

यदि आप शामिल करने के लिए डिफ़ॉल्ट फ़ाइलों में हेरफेर (जोड़ना या निकालना) करना चाहते हैं, तो आपको उपयोग करना होगा MANIFEST.in

पुन: इसमें क्या होना चाहिए?

प्रक्रिया सरल है:

  1. सुनिश्चित करें, आपके setup.pyद्वारा शामिल किए गए ( setupतर्कों के माध्यम से ) वे सभी फाइलें जिन्हें आप प्रोग्राम चलाने के लिए महत्वपूर्ण महसूस करते हैं (मॉड्यूल, पैकेज, स्क्रिप्ट ...)

  2. स्पष्ट करें, अगर जोड़ने के लिए कुछ फाइलें हैं या बाहर करने के लिए कुछ फाइलें हैं। अगर न तो जरूरत है, तो उपयोग करने की कोई जरूरत नहीं है MANIFEST.in

  3. अगर MANIFEST.inजरूरत है, तो बनाएं। आमतौर पर, आप वहाँ जोड़ने tests*/*.pyफ़ाइलें, README.rstअगर आप का उपयोग नहीं करते README.txt, docsपरीक्षण सुइट के लिए फ़ाइलों और संभवतः कुछ डेटा फ़ाइलों, यदि आवश्यक हो।

उदाहरण के लिए:

include README.rst
include COPYING.txt

इसका परीक्षण करने के लिए, चलाने python setup.py sdistके लिए और के तहत बनाई गई टारबॉल की जांच करें dist/

ये सभी अलग-अलग पैकेज सिस्टम कब ...

आज और 2 साल पहले की स्थिति की तुलना करें - स्थिति बहुत बेहतर है - setuptoolsजाने का रास्ता है। आप इस तथ्य को नजरअंदाज कर सकते हैं, distutilsथोड़ा टूटा हुआ है और निम्न स्तर का आधार है setuptoolsक्योंकि setuptoolsआप इन चीजों को छिपाने से ध्यान रखेंगे।

संपादित करें : पिछले कुछ परियोजनाओं का उपयोग मैं pbrतीन लाइन के साथ वितरण संकुल के निर्माण के लिए setup.pyऔर में आराम से किया जा रहा setup.cfgहै और requirements.txt। किसी भी MANIFEST.inअन्य अजीब सामान की देखभाल करने की आवश्यकता नहीं है । भले ही पैकेज थोड़ा और प्रलेखन के लायक होगा। Http://docs.openstack.org/developer/pbr/ देखें


1
मेरे सीमित अनुभव में ऐसा लगता है कि यदि आप एक अजगर मॉड्यूल के अंदर फाइल शामिल नहीं करना चाहते हैं ( init । Dir के साथ ), तो आपको MANIFEST.in का उपयोग करना होगा और sdist(मतलब: स्रोत वितरण ) कमांड का उपयोग करना होगा। अगर आपको लगता है कि विचार करें bdistऔर bdist_wheelकर रहे हैं द्विआधारी और केवल अपने अजगर पथ में स्थापित किया जा करने का इरादा है, यह समझ में आता है। (ये गैर-मॉड्यूल फाइलें और निर्देशिकाएं कहां जाएंगी /usr/local/lib/python2.7/dist-packages/?? निश्चित रूप से नहीं।) लेकिन यह ध्यान देने योग्य है क्योंकि यह बनाए गए संग्रह को देखने के लिए भ्रामक है और उनमें फाइलें शामिल नहीं हैं।
ब्रूनो ब्रोंस्की

7
अपरिहार्य package_dataऔर data_filesसिफारिशों को समाप्त करने के लिए, जो दायरे से बाहर हैं, मैं जारी रखूंगा। package_dataसूचियाँ फ़ाइल जो आपके पैकेज के साथ संस्थापित हो जाती है dist-packages/yourpackageजिसमें छोड़ दिया गया होगा क्योंकि * .py नाम नहीं है। data_filesउन फ़ाइलों को सूचीबद्ध करता है जो आपके पैकेज के बाहर स्थापित होती हैं। प्रत्येक प्रविष्टि एक लक्षित पथ निर्दिष्ट करती है जो कि उसके साथ उपसर्ग है sys.prefixयदि वह सापेक्ष है या सीधे बनाया गया है (अनुमति अनुमति) यदि यह ए से शुरू होता है /
ब्रूनो ब्रोंस्की

2
@JanVlcinsky यह जानना महत्वपूर्ण है कि क्या है और [अधिक महत्वपूर्ण रूप से] विभिन्न वितरण प्रारूपों में शामिल नहीं है। मेरे पास एक सार्वजनिक परियोजना है जिसे मैं केवल स्रोत वितरण के माध्यम से वितरित करता हूं क्योंकि मैं पैकेज के बाहर (रूट पर) एक boto.sample.cfg फ़ाइल (जिसमें एक नकली AWS IAM क्रेडेंशियल शामिल है) और बाइनरी वितरण शामिल नहीं होंगे। मैं डेटा के लिए उत्पादन करने के लिए निजी बाइनरी बनाता हूं, जिसमें data_files = [('/ etc /', ['boto.cfg']]] है। यदि आप गैर-पाई फ़ाइलों को वितरित करना चाहते हैं, तो आपको यह जानना होगा कि ये चीजें कैसे काम करती हैं।
ब्रूनो ब्रोंस्की

2
@MichaelGoerz ईमानदारी से, वे नहीं करना चाहिए। यह उत्तर प्राचीन है, और सुझाव देना pbrभी एक बुरा विचार है।
Arne

1
@ मैं सहमत हूं, चीजें आगे बढ़ीं। वर्तमान में मैं अपने अधिकांश प्रोजेक्ट्स को pbr से कविता
Jan Vlcinsky

7

पुराना प्रश्न, नया उत्तर:

नहीं, आप की जरूरत नहीं है MANIFEST.in। हालांकि, setuptoolsआप (आमतौर पर) का मतलब क्या करने के लिए, आपको इसका उपयोग करने की आवश्यकता है setuptools_scm, जो MANIFEST.in2 प्रमुख स्थानों में भूमिका निभाता है :

  • यह सुनिश्चित करता है कि सभी प्रासंगिक फाइलें sdistकमांड चलाते समय पैक की जाएं (जहां सभी प्रासंगिक फाइलें "स्रोत नियंत्रण के तहत सभी फाइलें" के रूप में परिभाषित की गई हैं)
  • का उपयोग करते समय include_package_dataके भाग के रूप पैकेज डेटा को शामिल करने buildया bdist_wheel। (फिर से: स्रोत नियंत्रण के तहत फाइलें)

की ऐतिहासिक समझ MANIFEST.inहै: जब आपके पास स्रोत नियंत्रण प्रणाली नहीं होती है, तो आपको "स्रोत फ़ाइलों" और "आपके कार्य निर्देशिका में होने वाली फ़ाइलों" के बीच अंतर करने के लिए कुछ अन्य तंत्र की आवश्यकता होती है। हालाँकि, आपकी परियोजना स्रोत नियंत्रण (दाएं ??) के अधीन है, इसलिए इसकी कोई आवश्यकता नहीं है MANIFEST.inइस लेख में अधिक जानकारी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.