用于创建python模块的python c api

用于创建python模块的python c api,python,c,python-module,Python,C,Python Module,我正在用C编写一个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(pSubM

我正在用C编写一个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 ...
编译之后,我试图通过各种导入方法访问模块及其常量

>>> 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

谢谢,

您实际上还没有创建名为
A.B
的可导入模块,因为
A
不是一个包。不能在C中创建包,只能创建模块;包由文件系统定义(或由备用加载程序定义,但这与本文无关)

>>> 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__'