विकल्प 1: पैकेज डेटा के रूप में स्थापित करें
अपने पायथन पैकेज के रूट के अंदर डेटा फ़ाइलों को रखने का मुख्य लाभ यह है कि यह आपको इस बारे में चिंता करने से बचने देता है कि फ़ाइलें उपयोगकर्ता के सिस्टम पर कहाँ रहेंगी, जो कि विंडोज़, मैक, लिनक्स, कुछ मोबाइल प्लेटफ़ॉर्म, या एग के अंदर हो सकती हैं। आप हमेशा निर्देशिका पा सकते हैंdata अपने पायथन पैकेज रूट के सापेक्ष , कोई फर्क नहीं पड़ता कि यह कहाँ या कैसे स्थापित है।
उदाहरण के लिए, अगर मेरे पास एक परियोजना लेआउट है जैसे:
project/
foo/
__init__.py
data/
resource1/
foo.txt
आप __init__.pyडेटा फ़ाइल के लिए एक निरपेक्ष पथ का पता लगाने के लिए एक फ़ंक्शन जोड़ सकते हैं :
import os
_ROOT = os.path.abspath(os.path.dirname(__file__))
def get_data(path):
return os.path.join(_ROOT, 'data', path)
print get_data('resource1/foo.txt')
आउटपुट:
/Users/pat/project/foo/data/resource1/foo.txt
परियोजना के बाद एक अंडे के रूप में स्थापित करने के लिए रास्ता dataबदल जाएगा, लेकिन कोड को बदलने की जरूरत नहीं है:
/Users/pat/virtenv/foo/lib/python2.6/site-packages/foo-0.0.0-py2.6.egg/foo/data/resource1/foo.txt
विकल्प 2: निश्चित स्थान पर स्थापित करें
विकल्प आपके डेटा को पायथन पैकेज के बाहर रखना होगा और फिर या तो:
- का स्थान है
dataकॉन्फ़िगरेशन फ़ाइल, कमांड लाइन तर्क या के माध्यम पारित
- अपने पायथन कोड में स्थान एम्बेड करें।
यह बहुत कम वांछनीय है यदि आप अपनी परियोजना को वितरित करने की योजना बनाते हैं। यदि आप वास्तव में ऐसा करना चाहते हैं, तो आप dataटापल्स की सूची में पास करके फ़ाइलों के प्रत्येक समूह के लिए गंतव्य को निर्दिष्ट करके लक्ष्य प्रणाली पर अपनी पसंद के अनुसार कहीं भी स्थापित कर सकते हैं :
from setuptools import setup
setup(
...
data_files=[
('/var/data1', ['data/foo.txt']),
('/var/data2', ['data/bar.txt'])
]
)
अद्यतित : एक शेल फ़ंक्शन का उदाहरण पुन: प्राप्त करने के लिए Pyreon फ़ाइलों को संक्षिप्त करें:
atlas% function grep_py { find . -name '*.py' -exec grep -Hn $* {} \; }
atlas% grep_py ": \["
./setup.py:9: package_data={'foo': ['data/resource1/foo.txt']}