我正在尝试为 Python 编写和安装一个 C 扩展,它必须加载一个 120MB 的数据文件。使用 distutilspackage_data
参数我已经将数据文件正确安装到与扩展模块相同的文件夹中。但是,C 代码不知道如何找到数据文件。
我可以在 C 扩展中硬编码已安装数据文件的路径(有效),但这显然不适用于具有不同安装目录的系统。我需要在 Linux 和 Windows 下都安装这个扩展。
我尝试使用PyModule_GetFilename()
来获取模块的路径,然后从中构建数据文件的路径,但是该函数会引发SystemError: module filename missing
. 可能错误是因为我试图在我的模块初始化函数中调用它?
如有必要,我可以在模块初始化之外手动加载数据文件,但我更愿意在导入时自动加载文件。
编辑:所以,我找到了一种解决方法。我写了一个初始化函数,它可以将文件的路径作为参数。从 Python 中,我可以访问模块的__file__
属性并从那里找出数据文件的路径。然后,如果我在__init__.py
. 虽然这可行,但我仍然希望有人能给我一个更优雅的解决方案,因为这对我来说感觉很倒退!