2013-09-21 140 views
2

我正嘗試使用C擴展模塊在Python 3上創建一個exe文件。在distutils的,你可以創建一個這樣的擴展:使用cx_Freeze編譯Python C擴展

from distutils.core import setup, Extension 

module1 = Extension('demo', 
        sources = ['demo.c']) 

setup (name = 'PackageName', 
     version = '1.0', 
     description = 'This is a demo package', 
     ext_modules = [module1]) 

比,擴展會與相應的編譯器編譯,並放在一起你用命令其他模塊:

python setup.py build_ext --inplace 

cx_Freeze是一個模塊可以將您的代碼與Python解釋器和相關軟件包一起打包到一個exe文件中。然後,最終用戶可以在不安裝Python的情況下使用您的程序。不幸的是,cx_Freeze沒有擴展類,我找不到用cx_Freeze處理編譯的方法。

我不確定的一個解決方案是首先使用distutils/setuptools構建擴展,然後使用cx_Freeze創建可執行文件。我不想重新發明輪子,所以我想知道在這方面有更多經驗的人是否有解決方案。

回答

5

我找到了一個工作解決方案。我可以從distutils的導入擴展,並把它傳遞到安裝程序從cx_Freeze:

from cx_Freeze import setup 
from distutils.core import Extension 
... 
setup=(... 
     ext_modules=Extension(...)) 

這是有道理的,因爲cx_Freeze是建立在distutils的頂上。最初,我試圖使用setuptools.setup,但這不起作用。