2014-01-30 73 views
1

我正在按照教程從the python docs的C++程序調用python代碼。如何調用需要導入包的python文件?

嘗試調用multiply示例時,一切正常。現在,如果我添加一行到Python源代碼導入庫,可以說openpyxl

from openpyxl import load_workbook 

我從蟒蛇

ImportError: No module named openpyxl 

我想收到一個錯誤,如果我導入系統庫,我不會有任何問題,但如果我嘗試導入datetime,我也會遇到錯誤。

我沒有任何錯誤,如果我從python控制檯導入文件。我的系統中安裝了openpyxl庫。

所以我的問題是:如何導入需要導入包的python源代碼?

編輯:好吧,我忘了提及一些事情,我沒有對你們完全誠實,對不起。

試圖運行我碰到一個問題的例子:我不能讓蟒蛇發現我multiply.py文件,行PyImport_Import總是返回null

我的解決方案是通過使用PySys_SetPath來添加我知道我的Python源代碼的路徑。問題是我剛剛意識到這個函數不會附加一個新的目錄,它只是覆蓋PYTHONPATH。所以現在python可以找到multiply.py,但絕對是別的。

當然,我已經刪除了這行,但現在我有另一個問題,爲什麼python無法找到我的源,如果該文件只是在C++編譯的程序相同的目錄?

的,我意識到,我的sys.path從我的Python控制檯是有點不同的路徑在我的嵌入式Python表明:第一個曾在列表中的一個空字符串''的開始。我不是Python專家,但是當我將該行添加到我的路徑中時,我可以導入multiply.py,所以看起來是我無法導入相對於我的可執行文件定位的模塊的原因是此空路徑的缺失 - 但仍然不知道它是什麼意思 - 。

我得感謝@ paul-evans,他給了我添加路徑來查找我的文件的想法。

+0

您的系統中是否安裝了多個python版本? – SethMMorton

+0

我有python 2.7,python 3和python 3.3。我很確定我通過調用'PyRun_SimpleString(「import sys \ nprint(sys.version)」)來使用2.7版本;' – camolin3

+0

'PYTHONPATH'變量只能在'site.py'中讀取,所以如果由於某種原因,你的解釋器沒有閱讀這個文件,你的'PYTHONPATH'將被忽略。 – SethMMorton

回答

1

這是PYTHONPATH的用途。您可以將其設置爲包含列表模塊目錄的環境變量,或者在代碼本身中,如下所示:

import sys 
sys.path.append("path/to/openpyxl/module") 
+0

好吧,它實際上用於查找'openpyxl',但它仍然無法加載'datetime'包... 我是否必須追加我的庫需要的每個目錄? – camolin3

+0

沒有發現'datetime'模塊看起來更像是一個安裝問題,但將它添加到PYTHONPATH將作爲臨時修復。你安裝後重新組織了你的python目錄嗎?你也可以嘗試重新安裝python。 –

+0

我正在使用與ubuntu 13.10一起安裝的標準python 2.7.5。找到該位置的問題不會從python控制檯中發生。 我認爲這可能是一個臨時修復,但我需要找到一個更好的,這個程序是打算在Windows機器上工作:/ – camolin3

相關問題