2010-03-15 24 views
16

Nhanh chóng ngay hôm nay: Tôi đang học trong thư viện của Pythons distutils, và tôi muốn bao gồm một mô-đun mở rộng python (.pyd) với gói của tôi. Tôi biết tất nhiên là cách khuyến khích là biên dịch phần mở rộng vào lúc tạo gói, nhưng đây là một phần mở rộng khá phức tạp bao trùm nhiều tệp nguồn và tham khảo một số thư viện bên ngoài. làm việc đúng.Phân phối mô-đun mở rộng trăn đã biên dịch trước bằng các đoạn biên

Trong thời gian chờ đợi, tôi có một tiện ích đang hoạt động của tiện ích sắp ra mắt của Visual Studio và muốn sử dụng nó trong trình cài đặt làm giải pháp tạm thời để cho phép tôi tập trung vào các vấn đề khác. Tôi không thể chỉ định nó như là một mô-đun, tuy nhiên, vì những người dường như phải có một phần mở rộng rõ ràng .py. Làm thế nào tôi có thể chỉ ra trong setup.py của tôi rằng tôi muốn bao gồm một mô-đun mở rộng biên dịch trước?

(Python 3.1, nếu vấn đề)

Trả lời

5

tôi giải quyết này bằng cách ghi đè 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

Rất đẹp! Câu trả lời cũng nên đề cập đến mục mở rộng đi vào 'setup (..)': 'ext_modules = [Extension (" _ my_extension ", sources = [])]' – letmaik

Các vấn đề liên quan