J'écris un module python en C, et je cherche un moyen d'écrire un module à l'intérieur d'un module.python c api pour créer un module python
PyMODINIT_FUNC
initA(void)
{
PyObject* pMod, pSubMod;
pMod = Py_InitModule3("A", A_Methods, A_Doc);
pSubMod = PyModule_New("B");
PyModule_AddStringConstant(pSubMod, "__doc__", B_Doc);
PyModule_AddIntConstant(pSubMod, "SOMETHING", 10);
PyModule_AddObject(pMod, "B", pSubMod);
... and so on ...
Après la compilation, je suis en train d'accéder au module et sa constante via diverses méthodes d'importation
>>> import A
>>> print A.B.SOMETHING
10
>>> from A import B
>>> print B.SOMETHING
10
>>> from A.B import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named B
deux premiers son raisonnable, et fonctionnent très bien. Cependant, le dernier ne fonctionne pas. Je m'attends à ce que je devrais avoir un code équivalent à __init__.py
. Cependant, je ne veux pas écrire un fichier .py distinct; Je veux plutôt avoir un tel code dans la fonction C init directement. Pour référence, je joins les codes __dict__
et __all__
des deux modules.
>>> A.__dict__
{'B': <module 'B' (built-in)>, '__package__': None, '__file__': 'A.so'}
>>> A.B.__dict__
{'SOMETHING': 10, '__package__': None, '__name__': 'B', '__doc__': 'B_Doc'}
>>> A.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__all__'
>>> A.B.__all__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__all__'
Merci,