2010-03-15 121 views
16

今天快速:我正在學習Pythons distutils庫的in和out,我想在我的軟件包中包含一個python擴展模塊(.pyd)。我當然知道建議的方法是在創建包時使用distutils編譯擴展,但這是一個相當複雜的擴展,跨越多個源文件並引用多個外部庫,因此需要一些重要的播放才能獲取所有內容正確的工作。使用distutils分配預編譯的python擴展模塊

與此同時,我有一個來自Visual Studio的擴展的已知工作構建,並且希望在安裝程序中將其用作臨時解決方案,以便讓我專注於其他問題。但是,我無法將其指定爲模塊,因爲這些模塊顯然必須具有明確的.py擴展名。我怎麼能在我的setup.py中表明我想包含一個預編譯的擴展模塊?

(Python的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

非常好!答案還應該提到進入'setup(..)'的擴展條目:'ext_modules = [Extension(「_ my_extension」,sources = [])]' – letmaik 2017-08-31 11:09:49

相關問題