शायद ऐसा करने का सबसे अच्छा तरीका setuptools
package_data
निर्देश का उपयोग करना है। इसका मतलब distutils
के बजाय setuptools
(या distribute
) का उपयोग करना है, लेकिन यह एक बहुत ही निर्बाध "अपग्रेड" है।
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
फ़ाइलों का नाम बदलना नहींहै।
अधिक जानकारी के लिए Ian Bicking's presentation देखें।
अद्यतन: एक अन्य [बेहतर] दृष्टिकोण
एक और दृष्टिकोण है कि अच्छी तरह से काम करता है तो आप सिर्फ स्रोत वितरण (sdist
) की सामग्री को नियंत्रित करने और (उदाहरण के लिए शीर्ष स्तर की डायरेक्टरी) पैकेज के बाहर फ़ाइलों के लिए चाहते हैं MANIFEST.in
फ़ाइल जोड़ने के लिए। इस फ़ाइल के प्रारूप के लिए the Python documentation देखें।
इस प्रतिक्रिया को लिखने के बाद, मैंने पाया है कि MANIFEST.in
का उपयोग करना आम तौर पर यह सुनिश्चित करने के लिए एक कम निराशाजनक दृष्टिकोण है कि आपके स्रोत वितरण (tar.gz
) में आपकी आवश्यक फ़ाइलें हैं।
उदाहरण के लिए, यदि आप उच्च-स्तरीय से requirements.txt
शामिल करना चाहता था, रिकर्सिवली उच्च-स्तरीय "डाटा" निर्देशिका में शामिल हैं:
include requirements.txt
recursive-include data *
फिर भी, क्रम में करने के लिए समय स्थापित पर कॉपी करने के लिए इन फ़ाइलों साइट-पैकेज के अंदर पैकेज के फ़ोल्डर में, आपको setup()
फ़ंक्शन पर include_package_data=True
की आपूर्ति करने की आवश्यकता होगी। अधिक जानकारी के लिए Adding Non-Code Files देखें।
आप कैसे करते हो कि इस समय? आपका पिछला प्रश्न इंगित करता है कि आप लाइसेंस फ़ाइल को जोड़ने के तरीके से परिचित हैं, तो आपका कोड क्या है जो "काम नहीं करता"? – SilentGhost
'data_files = [('', ['lgpl2.1_license.txt',]),] 'इसे पायथन 26 फ़ोल्डर में रखता है। –
कुछ नकारात्मक प्रतिक्रिया के बाद, मैंने फिर से आपका प्रश्न पढ़ा और महसूस किया कि मैं क्या खो रहा था। मैंने आपके प्रश्न को एक गैर-हैकिश समाधान प्रदान करने के लिए अपना उत्तर अपडेट किया है जिसके लिए किसी भी अतिरिक्त मॉड्यूल (जैसे setuptools या वितरित) की आवश्यकता नहीं है। –