2009-11-05 91 views
6

如何編譯一個C-Python模塊,使其在另一個本地?例如。如果我有一個名爲「bar」的模塊和另一個名爲「mymodule」的模塊,我該如何編譯「bar」以便通過「import mymodule.bar」導入它?嵌套的Python C擴展/模塊?

(很抱歉,如果這是措辭不當,我不知道什麼是正確的術語了。)

我試着在setup.py以下,但它似乎並沒有工作:

from distutils.core import setup, Extension 

setup(name='mymodule', 
     version='1.0', 
     author='Me', 
     ext_modules=[Extension('mymodule', ['mymodule-module.c']), 
        Extension('bar', ['bar-module.c'])]) 

編輯

感謝亞歷克斯。因此,這是我最後使用:

from distutils.core import setup, Extension 

PACKAGE_NAME = 'mymodule' 

setup(name=PACKAGE_NAME, 
     version='1.0', 
     author='Me', 
     packages=[PACKAGE_NAME], 
     ext_package=PACKAGE_NAME 
     ext_modules=[Extension('foo', ['mymodule-foo-module.c']), 
        Extension('bar', ['mymodule-bar-module.c'])]) 

當然是有一個文件夾命名爲「MyModule的」含__init__.py

回答

3

所述指令here

擴展( '富',[ '的src/foo1.c', 'SRC/foo2.c'])

描述了生活在一個擴展 根包,而

擴展( 'pkg.foo',[ '的src/foo1.c', 'SRC/foo2.c'])

描述相同extensi在 pkg包中。源文件和 產生的目標代碼在 兩種情況下都是相同的;唯一的區別是 其中在文件系統中(因此 其中在Python的名稱空間層次結構中) 生成的擴展名。

請記住,一個包總是一個包含模塊__init__的目錄(或zipfile)。要創建一個作爲包體的模塊,該模塊將被稱爲__init__,並位於包的目錄(或zipfile)下。我從來沒有用C做過;如果它不能直接使用,請將模塊命名爲_init,而__init__.pyfrom _init import *from ... import * ;-)的極少數合法用途之一。