J'ai trois questions, mais liées, et je ne comprends pas comment je peux les séparer. J'ai trouvé beaucoup d'informations sur ces questions, comme submodule extension, hierarchy, sur un empty __init__.py file, et comment cythonize multiple pyx files. Mais quand je les essaie ensemble, je ne peux pas les faire fonctionner.comment préparer des sous-modules de cythons
J'ai préparé un small repo en pensant ensemble des exemples de problèmes résolus. J'ai vérifié même le code de certains des projects listed qui utilisent le cython, mais qui n'obtiennent toujours pas comment faire trois choses en même temps.
- vide __init__.py fichier:
Dans un projet (où tous les fichiers sont ciboire (et PXD ifneedbe)), avec un ciboire __init __ qui comprend. tous, quand il y a un fichier __init__.py, puis l'importer ne charge pas le ".so" mais l'init vide.
- cythonize plusieurs fichiers:
Quand au lieu de préparer un __init__.py qui comprend tous les éléments d'un module. Comme:
cythonize(['factory.pyx', 'version.pyx'])
résultant ".donc" importation soulève une exception:
>>> import barfoo
(...)
ImportError: dynamic module does not define init function (PyInit_barfoo)
Il serait lié à la question précédente, s'il est nécessaire d'écrire quelque chose dans __init__.py .
- Submodule:
En fait, c'est la question principale. Le singleton.pyx ferait partie d'un sous-module, disons utilise pour être utilisé à partir d'autres éléments du module.
Pour l'échantillon y est un sous-module (simplement appelé soum) ajoutée dans le setup.py comme un autre poste. J'ai placé plus tôt que le principal (je ne sais pas si cela fait vraiment une différence, je ne l'ai pas vu).
>>> import barfoo
>>> import barfoo.subm
(...)
ImportError: No module named 'barfoo.subm'
Séparément, ces recettes fonctionnent, mais ensemble je ne peux pas. Le "__init__.py" semble être nécessaire quand il y a un mélange de "py" et "pyx". Les exemples expliquent comment cytoniser avec plusieurs fichiers, mais n'incluent pas le dernier point clé pour l'importation. Et les sous-modules ne sont pas complets sur la façon dont ils peuvent être importés d'un endroit ou d'un autre (importer des sous-modules lors de l'importation de la base, ou des importations facultatives lorsqu'elles sont spécifiées).
Pouvez-vous décrire la disposition de votre fichier (avant et après la compilation)? Je ne suis pas 100% clair de la question mais je pense que vous essayez de compiler plusieurs fichiers .pyx dans un seul fichier .so, et cela ne fonctionne pas. Chaque fichier .pyx doit générer son propre fichier .so – DavidW