2010-03-15 10 views
16

के साथ पूर्व-संकलित पायथन एक्सटेंशन मॉड्यूल वितरित करें आज एक त्वरित: मैं पाइथन डिस्ट्यूटिल्स लाइब्रेरी में और बाहर सीख रहा हूं, और मैं अपने पैकेज के साथ एक पायथन एक्सटेंशन मॉड्यूल (.pyd) शामिल करना चाहता हूं। मुझे निश्चित रूप से पता है कि संकल्प के समय डिस्ट्यूटल्स विस्तार को संकलित करने का अनुशंसित तरीका है, लेकिन यह कई स्रोत फ़ाइलों में फैले हुए एक जटिल जटिल विस्तार और कई बाहरी libs का संदर्भ देने के लिए है, इसलिए यह सब कुछ पाने के लिए कुछ महत्वपूर्ण खेल ले रहा है सही काम कर रहा हैdistutils

इस बीच मेरे पास विजुअल स्टूडियो से बाहर आने वाले विस्तार का एक ज्ञात कामकाजी निर्माण है, और इसे इंस्टॉलर में अस्थायी समाधान के रूप में उपयोग करना चाहते हैं ताकि मुझे अन्य मुद्दों पर ध्यान केंद्रित करने की अनुमति मिल सके। मैं इसे मॉड्यूल के रूप में निर्दिष्ट नहीं कर सकता, हालांकि, उन लोगों के स्पष्ट रूप से स्पष्ट .py एक्सटेंशन होना चाहिए। मैं अपने setup.py में कैसे इंगित कर सकता हूं कि मैं एक पूर्व-संकलित एक्सटेंशन मॉड्यूल शामिल करना चाहता हूं?

(अजगर 3.1, यह मायने रखता है तो)

उत्तर

5

मैं Extension.build_extension अधिभावी द्वारा इस हल:

setup_args = { ... } 
if platform.system() == 'Windows': 
    class my_build_ext(build_ext): 
     def build_extension(self, ext): 
      ''' Copies the already-compiled pyd 
      ''' 
      import shutil 
      import os.path 
      try: 
       os.makedirs(os.path.dirname(self.get_ext_fullpath(ext.name))) 
      except WindowsError, e: 
       if e.winerror != 183: # already exists 
        raise 


      shutil.copyfile(os.path.join(this_dir, r'..\..\bin\Python%d%d\my.pyd' % sys.version_info[0:2]), self.get_ext_fullpath(ext.name)) 

    setup_args['cmdclass'] = {'build_ext': my_build_ext } 

setup(**setup_args) 
+0

बहुत अच्छा! उत्तर में एक्सटेंशन प्रविष्टि का भी उल्लेख होना चाहिए जो 'सेटअप (..)' में जाता है: 'ext_modules = [एक्सटेंशन (" _ my_extension ", स्रोत = [])]' – letmaik

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