PyImport_ImportModule返回NULL的坑
先上函数的官方参考
先说结论 (我的环境Python37_64):
- PyImport_ImportModule返回NULL从路径问题查找
- 官方文档似乎有问题,该函数似乎只能用相对路径
- 最好自己运行PyRun_SimpleString(“print(os.listdir())”);测试一遍当前目录确保目录下有你想要导入的模块,如果要导入官方模块要跑到安装目录下
- python自身模块的优先级高于你自己定义的模块,最好不要起test.py这样的名字
- 虽然win文件名不区分大小写,但是实际上如果名字大小写不一致win中也会返回NULL
- PyImport_ImportModule(“TE.py”)是不对的,不能加后缀。
程序员最讨厌的两件事:写文档,没有文档
PyImport_ImportModule返回NULL基本是因为路径问题导致没有找到文件导致的。我之前在程序里试了好久,D:\te和D:\te.py都不成。
自己输te或者te.py也不成,然后放了一段时间,后来想到也许是我搞错了python模块的当前目录于是
PyRun_SimpleString("import os");
PyRun_SimpleString("print(os.listdir())");
果然测出目录不是我想象的那样。修改路径,果然成了。
PyObject_GetAttrString
这个原因可能有
- 你写的python函数语法有问题
- python自身模块的优先级高于你自己定义的模块,比如你的函数和文件名都是test,解释器调用了python自己的test模块。
- 听说有时候print函数会导致问题,没具体了解
[我的环境]