2010-11-23 8 views
7

तो मैं एक निर्देशिका है कि कुछ इस तरह दिखता है:पायथन सेटअप स्क्रिप्ट एक्सटेंशन, आप एक .h फ़ाइल कैसे शामिल करते हैं?

home\ 
    setup.py 
    some_python_file.py 
    ext\ 
     __init__.py 
     c_file1.c 
     c_file2.c 
     ext_header.h 

जाहिर हेडर फाइल ग फ़ाइलों को संकलित करने के लिए आवश्यक है, लेकिन समस्या यह है कि मैं शामिल नहीं प्राप्त कर सकते हैं सेटअप स्क्रिप्ट है शीर्ष लेख फ़ाइल।

Extension('ext.the_extension', ['ext/c_file1.c', 'ext/c_file2.c']) 

कौन सा काम करता है, लेकिन हेडर फाइल शामिल नहीं है:

मेरे एक्सटेंशन ऑब्जेक्ट कुछ इस तरह है। अगर मैं के लिए इसे बदल:

Extension('ext.the_extension', ['ext/c_file1.c', 'ext/c_file2.c', 'ext_header.h']) 

यह ज 'फाइल शामिल है, लेकिन उसके बाद निर्माण नहीं करता है जब मैं स्थापित चलाते हैं। इसके बजाय यह देता है और त्रुटि error: unknown file type '.h' (from 'ext/ext_header.h')

अगर मैं इस तरह एक डेटा फ़ाइल के रूप में हेडर फाइल में शामिल हैं:

data_files=[('ext', ['ext/ext_header.h'])] 

यह बिल्कुल काम नहीं करता है, ज फ़ाइल भी में यह नहीं है मैनिफ़ेस्ट फ़ाइल।

तो मेरा क्यूशन है, आप इस एक्सटेंशन को हेडर फ़ाइल के साथ कैसे शामिल करते हैं ताकि python setup.py install इसे सही तरीके से तैयार कर सके?

उत्तर

6

मुझे लगता है कि एक और मानक समाधान के लिए pyfunc ट्रैक पर है, लेकिन मुझे अपने आप पर एक और समाधान मिला। मुझे नहीं पता कि यह एक अच्छा समाधान है या सिर्फ एक हैक है, लेकिन मैंने जो कुछ किया है वह हैडर फ़ाइल को MANIFEST.in में जोड़ना है। प्रलेखन वास्तव में ऐसा नहीं लगता है कि MANIFEST.in फ़ाइल के लिए यह है, लेकिन यह काम करता है। मेरे MANIFEST.in फ़ाइल अब इस तरह दिखता है:

include ext/ext_header.h 

फ़ाइल शामिल कौन सा और सफलतापूर्वक संकलित जब मैं चलाने python setup.py install

+0

यदि आपके पास अधिक शीर्षलेख फ़ाइलें हैं 'ext/*। H' शामिल हैं तो भी काम करेंगे। समाधान के रूप में कृपया इसे (हाँ अपना जवाब) चिह्नित करें। – Anthon

1

डॉक्स से,

module1 = Extension('demo', 
       define_macros = [('MAJOR_VERSION', '1'), 
           ('MINOR_VERSION', '0')], 
       include_dirs = ['/usr/local/include'], 
       libraries = ['tcl83'], 
       library_dirs = ['/usr/local/lib'], 
       sources = ['demo.c']) 

आप "include_dirs" के माध्यम से शामिल फ़ाइलें प्रदान करना चाहिए।

यह आपके लिए क्यों काम नहीं करता है?

+0

मुझे लगता है कि यह सही रास्ता हो सकता है, लेकिन मैं थोड़ा है क्या करने के लिए के रूप में उलझन में हूँ चल रहा। क्या include_dir वैरिएबल सिर्फ कंपाइलर को नहीं कहता है जहां हेडर फाइलों को देखना है? यह मेरी .h फ़ाइल में मैनिफ़ेस्ट में कैसे परिणाम देगा? – user411133

+0

'डीआईआरएस' शामिल है कंपाइलर को बताता है कि आप '<>' के साथ शामिल मानक शीर्षलेख फ़ाइलों को देखना चाहते हैं, उदाहरण के लिए '', '' आदि। यदि सेटअप स्क्रिप्ट आपके स्वयं के शीर्षलेख को पैकेज नहीं करना चाहती है फाइलें, मुझे लगता है कि आपको पाइथन एक्सटेंशन में कस्टम हेडर फाइल नहीं होने चाहिए। –

+0

@Blagovest Buyukliev: दोनों मानक और कस्टम हेडर फाइलों स्थान में की ओर इशारा कर रहे हैं - \ _dirs शामिल – pyfunc

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