pythoncapi来创建python modu

2024-10-16 20:52:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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 ...

编译之后,我尝试通过各种导入方法访问模块及其常量

^{pr2}$

前两个听起来很合理,工作也不错。然而,最后一个不起作用。我希望我应该有一个相当于__init__.py脚本的代码。但是,我不想编写单独的.py文件;而是希望在C init函数中直接编写这样的代码。在

作为参考,我附加了两个模块的__dict__和{}。在

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

谢谢


Tags: 模块方法inpydocsoinitall
1条回答
网友
1楼 · 发布于 2024-10-16 20:52:48

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

相关问题 更多 >