2012-06-07 18 views
15

मूल रूप से मेरी अजगर पैकेज है सेटअप की तरह:क्या पैकेज डेटा के हिस्से के रूप में dist utils (setup.py) का उपयोग कर उपनिर्देशिका को शामिल करना संभव है?

module 
\_examples 
    \_folder1 
    \_file1.py 
    \_file2.py 
    \_folder2 
    \_file1.py 
    \_file2.py 

मूल रूप से मैं चाहता हूँ बस का उपयोग करें: यह से उन्हें सूचीबद्ध करने के लिए आसान होने के लिए

package_data = { 
      'module': ['examples/*'], 
    }, 

क्योंकि मेरी परियोजना हमेशा उदाहरण जोड़ने लोग है और मैं चाहता हूँ मेरे आवेदन के भीतर। मैं इसे उदाहरण के भीतर किसी भी फ़ाइल के लिए काम कर सकता हूं, लेकिन उप-निर्देशिकाओं के माध्यम से फिर से अभिशाप नहीं कर सकता। क्या यह संभव है?

उत्तर

1

इसके लिए आपको MANIFEST.in फ़ाइल का उपयोग करना होगा।

मेरा मानना ​​है कि आप कुछ इस तरह करना चाहेंगे:

 
$ cat MANIFEST.in 
recursive-include examples/ *.py 
+0

का उपयोग करते हैं चाहिए नहीं मुझे लगता है कि आप भी सीधे अजगर कार्यों का उपयोग कर सकते हैं setup.py में फ़ाइलों और निर्देशिकाओं को खोजने के लिए है, लेकिन मैं काफी सटीक नहीं मिल सकता है इस समय जवाब दें। –

+1

एचआरएम, मुझे इसे करने की कोशिश करनी होगी जैसा कि मैंने किया था: रिकर्सिव-उदाहरण उदाहरण * .py और/का उपयोग नहीं किया। मैंने पढ़ा है कि MANIFEST.in को बहिष्कृत किया जा रहा है। मुझे लगता है कि मुझे सिर्फ पायथन फ़ंक्शन कॉल विधि का पालन करना पड़ सकता है। – xamox

+2

ओह ... अच्छा, अगर आप पाइथन के साथ इसे कैसे करें, तो कृपया यहां पोस्ट करें। मैं जानना चाहता हूं। –

28

मेरा मानना ​​है कि आप जो खोज रहे हैं आप setup.py के लिए कुछ इस तरह है, जो रिकर्सिवली परियोजना में किसी भी संकुल मिलेगा है, यह भी सुनिश्चित हो और प्रत्येक पैकेज के लिए __init__.py फ़ाइलों को उपनिर्देशिका में शामिल करें।

from setuptools import setup, find_packages 

setup(name='MySoftware', 
    packages=find_packages() 
} 
+0

यहां सावधान रहें, क्योंकि आप गलती से परीक्षण निर्देशिका आदि शामिल कर सकते हैं, जब तक कि आप स्पष्ट रूप से 'बहिष्कृत न करें ...'। – Arminius

1

हां, आप सभी उपनिर्देशिकाएं शामिल कर सकते हैं।

तुम बस सेटअप करने के लिए नीचे दिए गए आर्ग उत्तीर्ण करने की आवश्यकता() फ़ंक्शन:

packages=find_packages() 

include_package_data=True 

इसके साथ ही आप के रूप में

recursive-include examples * 

यह सुनिश्चित करता है सामग्री के साथ एक MANIFEST.in फ़ाइल के लिए, की जरूरत है सभी फाइलों को दोबारा शामिल किया गया है।

यदि आप विशेष रूप से कुछ एक्सटेंशन बहिष्कृत करना चाहते हैं, तो आप find_packages() तर्क में सरणी को बहिष्कृत करके ऐसा कर सकते हैं।

पूर्व: .txt फ़ाइलों

packages=find_packages(exclude=['.txt']) 

बाहर करने के लिए आप include_package_datahere अधिक के बारे में पढ़ सकते हैं।

और यह भी here एक और लिंक जो आपको बताता है कि include_package_data