Nidificati Python C estensioni / moduli?
-
16-09-2019 - |
Domanda
Come faccio a compilare un modulo C-Python tale che è locale a un altro? Per esempio. Se ho un modulo denominato "bar" e un altro modulo denominato "mymodule", come si fa compilo "bar" in modo che importata tramite "mymodule.bar importazione"?
(scusate se questo è mal formulata, non ero sicuro di quello che il termine corretto perché era.)
Ho provato quanto segue in setup.py, ma non sembra funzionare:
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'])])
Modifica
Grazie Alex. Quindi questo è quello che ho finito per usare:
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'])])
con ovviamente una cartella denominata "mymodule" contenente __init__.py
.
Soluzione
Le istruzioni sono qui :
Extension ( 'foo', [ 'src / foo1.c', 'Src / foo2.c'])
descrive un'estensione che vive in package principale, mentre
Extension ( 'pkg.foo', [ 'src / foo1.c', 'Src / foo2.c'])
descrive la stessa estensione nella pacchetto pkg. I file di origine e risultante codice oggetto sono identici a entrambi i casi; l'unica differenza è dove nel file system (e quindi dove la gerarchia dello spazio dei nomi di Python) l'estensione risultante vive.
Ricordate, un pacchetto è sempre una directory (o file zip) contenente un __init__
modulo. Per creare un modulo che è un corpo del pacchetto, che il modulo sarà chiamato __init__
e vivono sotto la directory del pacchetto (o file zip). Non ho mai fatto che in C; se non funziona per farlo direttamente, il nome del modulo di esempio _init
invece, e in __init__.py
fare from _init import *
. (uno dei pochissimi usi legittimi delle from ... import *
; -)