2011-12-13 144 views
1

所以我有一個c到python包裝,它接受輸入字符串並將它們傳遞給一個python函數。錯誤即時得到的是,蟒蛇API是不承認我的Python文件...嵌入python模塊錯誤

PyObject *pName, *pModule, *pFunc; 
QString pyFile="Test.py"; 
Py_Initialize(); 
pName = PyUnicode_FromString(pyFile.toAscii().data()); 
pModule = PyImport_Import(pName); 

錯誤是「導入錯誤:沒有名爲Test.py模塊」 這是當我有我的Test.py在同一目錄作爲我的項目

當我把我的Test.py上一級在我的目錄樹中,另一個錯誤想出了 錯誤「導入由文件名,不支持」

所以我想絕對路徑不工作?但在我的例子中的第一種情況下,我明確地將我的Test.py放在與我的項目相同的目錄中,爲什麼我得到錯誤? Python代碼是:

import sys 
import os 

def printFileClass(fileName, className): 
    print ("The OMC CORBA File name is ", fileName,"\n") 
    print ("The selected Modelica Class is ", className) 
    return ("Done operations") 


def main(): 
    print ("Hello! Here is testing script's main \n") 



if __name__=='__main__': 
main() 
+0

我會認真地建議不要使用任何python模塊或腳本的名稱「測試」。有一個內置的模塊與該名稱和創建自己總是會導致問題。嘗試從導入的模塊名稱中刪除「.py」。 – 2011-12-13 19:22:15

+0

所以我試着用測試,但它給了我同樣的錯誤... =( – PeterG 2011-12-13 19:50:49

回答

1

這是在第一種情況下真正的沒有模塊名爲「Test.py」。您的模塊在「Test.py」文件中名爲「Test」。嘗試導入。 「Test.py」將是名爲「Test」的包中的「py」子模塊。

+0

所以我試着只是測試。但得到了同樣的錯誤沒有模塊名稱測試.... – PeterG 2011-12-13 19:37:32

3

PYTHONPATH環境變量可用於解決您的問題。

在代碼中,你可以做Py_Initialize()在此之前的地方:

setenv("PYTHONPATH", ".", 0); // #include <stdlib.h> to get the prototype 

第三個參數,0,意味着覆蓋 - 這是零,所以你也可以從shell通過PYTHONPATH。如果您想要始終使用您編碼的路徑,則可以將其設置爲1.

我不確定這不會將您暴露給其他問題,但是對於簡單的測試它可以正常工作。

此外,不要在傳遞給PyImport_Import的模塊名稱中包含.py擴展名。

我在Linux系統上測試了這個。