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函數會導致問題,沒具體瞭解
[我的環境]