Pergunta

Como faço para compilar um módulo C-Python tal que é local para outro? Por exemplo. Se eu tiver um módulo chamado "bar" e outro módulo chamado "mymodule", como faço para compilar "bar" para que ele importados via "mymodule.bar importação"?

(Desculpe se isso é mal formulada, eu não tinha certeza do que o termo apropriado para que era.)

Eu tentei o seguinte em setup.py, mas não parecem funcionar:

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'])])

Editar

Graças Alex. Então é isso que eu acabei usando:

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'])])

com, claro, uma pasta chamada "mymodule" contendo __init__.py.

Foi útil?

Solução

As instruções são aqui :

Extensão ( 'foo', [ 'src / foo1.c', 'Src / foo2.c'])

descreve uma extensão que vive em o pacote de raiz, enquanto

Extensão ( 'pkg.foo', [ 'src / foo1.c', 'Src / foo2.c'])

descreve a mesma extensão na pacote pkg. Os arquivos de origem e resultando código de objecto são idênticos em ambos os casos; a única diferença é em que no sistema de ficheiros (e, por conseguinte onde na hierarquia de namespace do Python) a vida de extensão resultante.

Lembre-se, um pacote é sempre um diretório (ou arquivo zip) contendo uma __init__ módulo. Para criar um módulo que é um corpo de pacote, esse módulo será chamado __init__ e viver sob o diretório do pacote (ou arquivo zip). Eu nunca fiz isso em C; Se ele não funciona para fazê-lo diretamente, o nome do módulo de exemplo _init vez, e em __init__.py fazer from _init import * (uma das poucas utilizações legítimas do from ... import *; -).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top