संभवतः ऐसा करने का सबसे अच्छा तरीका setuptools
package_data
निर्देश का उपयोग करना है । इसका मतलब इसके बजाय setuptools
(या distribute
) का उपयोग करना है distutils
, लेकिन यह एक बहुत ही सहज "अपग्रेड" है।
यहाँ एक पूर्ण (लेकिन अप्रयुक्त) उदाहरण दिया गया है:
from setuptools import setup, find_packages
setup(
name='your_project_name',
version='0.1',
description='A description.',
packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),
package_data={'': ['license.txt']},
include_package_data=True,
install_requires=[],
)
उन विशिष्ट पंक्तियों पर ध्यान दें जो यहां महत्वपूर्ण हैं:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
एक dict
पैकेज के नाम (खाली = सभी संकुल) प्रतिमानों की सूची के लिए (globs शामिल कर सकते हैं) के। उदाहरण के लिए, यदि आप अपने पैकेज में केवल फाइलें निर्दिष्ट करना चाहते हैं, तो आप वह भी कर सकते हैं:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
यहाँ समाधान निश्चित रूप से विस्तार के साथ आपकी गैर- फ़ाइलों का नाम बदलने के लिए नहीं है ।py
.py
अधिक जानकारी के लिए इयान बेकिंग की प्रस्तुति देखें ।
अद्यतन: एक और [बेहतर] दृष्टिकोण
एक अन्य दृष्टिकोण जो अच्छी तरह से काम करता है यदि आप स्रोत वितरण की सामग्री को नियंत्रित करना चाहते हैं ( sdist
) और पैकेज के बाहर की फाइलें (जैसे शीर्ष-स्तरीय निर्देशिका) एक MANIFEST.in
फ़ाइल जोड़ना है । इस फ़ाइल के प्रारूप के लिए पायथन प्रलेखन देखें ।
इस प्रतिक्रिया को लिखने के बाद से, मैंने पाया है कि MANIFEST.in
आम तौर पर आपके स्रोत वितरण ( tar.gz
) में आपकी ज़रूरी फाइलों के वितरण के लिए एक कम निराशाजनक दृष्टिकोण है ।
उदाहरण के लिए, यदि आप requirements.txt
शीर्ष-स्तर से शामिल करना चाहते हैं, तो शीर्ष-स्तर "डेटा" निर्देशिका को पुन: शामिल करें:
include requirements.txt
recursive-include data *
फिर भी, इन फ़ाइलों को साइट-पैकेज के अंदर पैकेज के फ़ोल्डर में स्थापित करने के लिए कॉपी करने के लिए, आपको फ़ंक्शन को आपूर्ति include_package_data=True
करने की आवश्यकता होगी setup()
। अधिक जानकारी के लिए गैर-कोड फ़ाइलें जोड़ना देखें ।