Question

Comment compiler un module C-Python tel qu'il est local à un autre? Par exemple. si je suis un module nommé « bar » et un autre module nommé « mymodule », comment puis-je compiler « bar » de sorte qu'il a importé via « mymodule.bar import »?

(Désolé si cela est mal formulée, je ne suis pas sûr de ce que le terme approprié car il était.)

J'ai essayé ce qui suit dans setup.py, mais il ne semble pas fonctionner:

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

Modifier

Merci Alex. Voilà donc ce que je fini par utiliser:

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

avec bien sûr un dossier nommé "mymodule" contenant __init__.py.

Était-ce utile?

La solution

Les instructions sont :

  

Extension ( 'foo', [ 'src / foo1.c',   'Src / foo2.c'])

     

décrit une extension qui vit dans   le paquet de racine, tandis que

     

Extension ( 'pkg.foo', [ 'src / foo1.c',   'Src / foo2.c'])

     

décrit la même extension dans le   package pkg. Les fichiers source et   résultant code objet sont identiques en   les deux cas; la seule différence est   où dans le système de fichiers (et par conséquent   où dans la hiérarchie de l'espace de noms de Python)   l'extension résultante vit.

Rappelez-vous, un paquet est toujours un répertoire (ou zipfile) contenant un __init__ de module. Pour créer un module qui est un corps de package, ce module sera appelé __init__ et vivent sous le répertoire du paquet (ou zipfile). Je ne l'ai jamais fait dans C; si cela ne fonctionne pas à le faire directement, nommez le module par exemple _init à la place, et __init__.py faire from _init import *. (l'une des utilisations très peu légitimes de from ... import *; -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top