python c api创建一个python模块
问题描述:
我正在用C编写一个python模块,并寻找一种在模块内部编写模块的方法。python c api创建一个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
首先两个声音合理,做工精细访问模块及其常量。但是,最后一个不起作用。我期待我应该有一个相当于__init__.py
脚本的代码。但是,我不想编写一个单独的.py文件;而是我想直接在C init函数中拥有这样的代码。
作为参考,我附上__dict__
和__all__
这两个模块。
>>> 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__'
感谢,
答
您还没有实际创建了一个名为A.B
一个导入的模块,因为A
是不是一个包。您不能在C中创建软件包,仅限于模块;包是由文件系统定义的(或者由一个备用的加载器来定义,但在这里并不重要)。