2010-03-15 2 views
16

오늘 빠른 내용 : Pythons distutils 라이브러리의 사용법과 사용법을 배우고 있습니다. 파이썬 확장 모듈 (.pyd)을 패키지에 포함하고 싶습니다. 물론 권장되는 방법은 패키지가 생성 될 때 distutils가 확장 기능을 컴파일하도록하는 것입니다. 그러나 이것은 많은 소스 파일에 걸쳐 있고 여러 외부 라이브러리를 참조하는 상당히 복잡한 확장입니다. 그래서 모든 것을 얻으려면 몇 가지 중요한 작업을 수행 할 것입니다. 일하는 권리.미리 컴파일 된 Python 확장 모듈을 distutils로 배포하십시오.

그동안 Visual Studio에서 확장 기능이 작동하는 것으로 알려진 빌드가 있으며 다른 문제에 집중할 수 있도록 임시 솔루션으로 설치 프로그램에서 사용하고 싶습니다. 그러나 모듈로 지정할 수는 없습니다. 분명히 명시적인 .py 확장자가 있어야하기 때문입니다. setup.py에 미리 컴파일 된 확장 모듈을 포함하고 싶다는 것을 어떻게 나타낼 수 있습니까?

답변

0

package_data 사용해보십시오 :

+0

package_data not hono 사전 컴파일 된 모듈의 디렉토리 구조. – Dilawar

5

http://docs.python.org/distutils/setupscript#installing-package-data 내가 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

관련 문제