2009-11-13 16 views
9

वितरित करने के साथ पैकेजिंग संसाधन मैं एक पायथन अंडे विकसित कर रहा हूं जिसमें कई .txt निर्भरताएं हैं (वे अंडे द्वारा फाइलें उत्पन्न करने के लिए उपयोग किए जाने वाले टेम्पलेट्स हैं), और मैं उन निर्भरताओं को site-packages पर कॉपी करने के लिए संघर्ष कर रहा हूं setup.py installdistribute documentation ...setuptools/वितरण

अपने पैकेज की फ़ाइल के अनुसार:

setup.py 
package 
|--- __init__.py 
|--- main.py 
|--- binary (calls main.py with pkg_resources.load_entry_point) 
|--- templates 
    |--file1.txt 
    |--file2.txt 

setup.py में:

setup(
    [...] 
    eager_resources = ['templates/file1.txt', 'templates/file2.txt'] 
) 

अपने पैकेज के भीतर:

from pkg_resources import resource_string 
tpl = resource_string(__name__, 'templates/file1.txt') 

... कॉन्फ़िगरेशन और फाइल सिस्टम के इस संयोजन का परिणाम file1.txt और file2.txtpkg_resources.resource_string के माध्यम से उपलब्ध होना चाहिए। दुर्भाग्यवश, setup.py install के दौरान उन्हें site-packages पर कॉपी नहीं किया जा रहा है। मैं क्या खो रहा हूँ?

धन्यवाद!

उत्तर

4

आप यहाँ पैकेज डेटा सहित के लिए setuptools प्रलेखन पर ध्यान दिया है: http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

मूल रूप से, आप बस अपने setup.py फ़ाइल में include_package_data=True सेट करना होगा। यदि आप उपवर्तन या सीवीएस का उपयोग कर रहे हैं, तो सभी संस्करण वाली फाइलें शामिल की जाएंगी। यदि नहीं, तो आप निर्दिष्ट कर सकते हैं कि कौन सी फाइलें MANIFEST.in फ़ाइल के साथ शामिल हों।

मेरा मानना ​​है कि वितरण भी इसका समर्थन करता है।

तब आप उन फ़ाइलों तक पहुंच सकते हैं जैसे आप उन्हें पैक किए बिना करेंगे। अर्थात main.py में आप हो सकता है:

import os.path 
f = open(os.path.join(os.path.dirname(__file__),'templates','file1.txt')) 
print f.read() 
f.close() 

और इस पैक संस्करण में के रूप में अच्छी तरह से काम करेगा। एक चेतावनी यह है कि आपको setup.py में zip_safe = False भी सेट करना होगा ताकि सभी फ़ाइलों को स्थापना के दौरान अनजिप किया जा सके।

+0

उत्कृष्ट, सहायता के लिए धन्यवाद। क्या आप "डेटा फाइल" और "संसाधनों" के बीच के अंतर को स्पष्ट करने के बारे में सोचेंगे, जैसा कि आपने सेटअप सेटअप दस्तावेज़ों द्वारा परिभाषित किया है? मैं संसाधनों के लिए निर्देशों का पालन कर रहा था, लेकिन वे गुणात्मक रूप से अलग दिखते हैं। धन्यवाद! –

+0

ठीक है, आपका सवाल पहली बार था जब मैंने कभी "संसाधन" भर दिया है, इसलिए मैं भी उत्सुक हूं कि वे क्या हैं। लेकिन डेटा फाइलें निश्चित रूप से टेम्पलेट्स जैसी चीजों के लिए जाने का तरीका हैं। – pcardune

+8

ध्यान दें कि आपको zip_safe = गलत का उपयोग करने की आवश्यकता नहीं है। इसके बजाय, pkg_resources.resource_stream ('packagename', 'templates/file1.txt') का उपयोग करें। पढ़ें() और setuptools आपके लिए फाइल सिस्टम या ज़िपित अंडे से स्ट्रीम प्राप्त करेंगे। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^