आप pkg_resources
लाइब्रेरी का उपयोग करना चाह सकते हैं जो setuptools
के साथ आता है।
proj/setup.py
proj/proj/__init__.py
proj/proj/code.py
proj/proj/resources/__init__.py
proj/proj/resources/images/__init__.py
proj/proj/resources/images/pic1.png
proj/proj/resources/images/pic2.png
सूचना कैसे मैं एक अलग सबपैकेज में सभी संसाधनों का ध्यान रखें:
उदाहरण के लिए, मैं एक त्वरित छोटे पैकेज "proj"
संसाधन संगठन योजना मैं का उपयोग करेंगे वर्णन करने के लिए बना है।
"code.py"
दिखाता है कि कैसे pkg_resources
संसाधन वस्तुओं के लिये किया जाता है:
from pkg_resources import resource_string, resource_listdir
# Itemize data files under proj/resources/images:
print resource_listdir('proj.resources.images', '')
# Get the data file bytes:
print resource_string('proj.resources.images', 'pic2.png').encode('base64')
आप इसे चलाते हैं, तो आप मिल:
['__init__.py', '__init__.pyc', 'pic1.png', 'pic2.png']
iVBORw0KGgoAAAANSUhE ...
आप एक fileobject के रूप में एक संसाधन के इलाज के लिए की जरूरत है, resource_stream()
का उपयोग करें।
संसाधनों तक पहुंचने वाला कोड कहीं भी आपके प्रोजेक्ट की उप-पैकेज संरचना के भीतर हो सकता है, इस मामले में छवियों को पूर्ण नाम: proj.resources.images
से संबंधित उप-पैकेज को संदर्भित करने की आवश्यकता है।
यहाँ "setup.py"
है:
#!/usr/bin/env python
from setuptools import setup, find_packages
setup(name='proj',
packages=find_packages(),
package_data={'': ['*.png']})
चेतावनी: बातें परीक्षण करने के लिए "स्थानीय रूप से", वह यह है कि/पहले पैकेज को स्थापित करने ओ डब्ल्यू, आप निर्देशिका है कि setup.py
से अपने परीक्षण स्क्रिप्ट आह्वान करना होगा । यदि आप code.py
के समान निर्देशिका में हैं, तो Python को proj
पैकेज के बारे में पता नहीं चलेगा। तो proj.resources
जैसी चीजें हल नहीं होंगी।
वैसे, यहां नुकसान बहुत अधिक हैं। क्या पाइथन परियोजनाओं के साथ संसाधनों को पैक करने का कोई आसान तरीका नहीं है? –
मुझे केवल 2 व्यापक रूप से समर्थित तरीकों के बारे में पता है (वे दुर्भाग्य से सरल नहीं हैं): 1) 'distutils'-way (मानक): प्रलेखन संसाधन फ़ाइलों को पाठक के लिए एक अभ्यास के रूप में उपयोग करने से छोड़ देता है (शायद क्योंकि वे पथ में हेरफेर '__file__' के सापेक्ष सभी की जरूरत है)। 2) 'setuptools'-way ('distutils' का सुपरसेट) ऊपर वर्णित है। –