বিকল্প 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'])
]
)
আপডেট হয়েছে : পাইথন ফাইলগুলি পুনরাবৃত্তভাবে গ্রেপ করতে শেল ফাংশনের উদাহরণ:
atlas% function grep_py { find . -name '*.py' -exec grep -Hn $* {} \; }
atlas% grep_py ": \["
./setup.py:9: package_data={'foo': ['data/resource1/foo.txt']}