在Python中,您可以使用__file__
属性获取当前文件路径。
print(__file__)
如何从 Python C 扩展访问此属性?我尝试了以下代码,但该属性不存在。
if (PyObject_HasAttrString(module, "__file__")) {
PyObject *string = PyObject_GetAttrString(module, "__file__");
const char *path = PyUnicode_AsUTF8(string);
}
最佳答案
这取决于您何时想要访问 __file__
属性以及创建模块的具体方式。
在单阶段初始化中(当您在 PyInit_yourmodulename
中调用 PyModule_Create
时)__file__
设置之后 PyInit_*
函数被调用。因此,您只能在模块完全导入之后才能访问它。
在 multi-phase initialization ,其中 PyInit_yourmodulename
返回一个 PyModuleDef
对象,然后调用该 PyModuleDef
的 Py_mod_create
插槽,您可以设置来自传递给 Py_mod_create
的 spec
的文件名。 ModuleSpec
对象有一个属性origin
。这对应于加载模块的文件。因此,您可以从 spec.origin
设置模块的 __file__
属性。
如果您在 PyInit_yourmodulename
系统之外创建模块(例如,从单个文件创建多个模块),那么您就不走运了,并且必须弄清楚__file__
是你自己。
关于python - 如何在 Python C 扩展中访问当前文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70740825/