我正在研究一個簡單的(?)嵌入式Python項目。我有一個已安裝到站點包用「的setup.py安裝」自定義程序包,如:爲什麼這個'from-import'與PyRun_SimpleString失敗?
在C:\ Python27 \ LIB \站點包\:
mypackage\
__init__.py
subpackage\
__init__.py
subpackage.py
....
mymodule.py
只是做一些簡單的嵌入調用,我得到了一些不符合我在運行Python的cmd窗口中獲得的行爲。具體做法是:
PyRun_SimpleString("import mypackage") //Success (return == 0)
PyRun_SimpleString("from mypackage import subpackage") //Success
PyRun_SimpleString("from mypackage import mymodule") //Fail (return == -1)
......而所有這些工作就好在cmd窗口(不導入錯誤,我可以得到預期的結果如dir(mymodule)
我知道,從結果解釋Py_Initialize()
與你在cmd窗口中得到的有點不同,特別是sys.path ...已經閱讀了一些其他的答案我試圖插入''作爲sys.path的第一個元素: PyRun_SimpleString("import sys\nsys.path.insert(0,'')")
失敗之前導入,但沒有運氣,仍然返回-1。還嘗試追加sys.path'C:\ Python27 \ Lib \ site-packages \ mypackage',但仍然沒有運氣導入'mymodule'(mymodule.py)。
根據SO和其他網站上的其他示例,我在導入時嘗試了一些變體,例如,
__import__('mypackage',globals(), locals(), fromlist=['mymodule'])
__import__('mypackage.mymodule',globals(), locals(), fromlist=['mymodule'])
也試過PyImport_ImportModuleEx
並與PyRun_SimpleString,它爲一切,除了 「從mypackage的進口MyModule的」。
此外:這個場景在MacOS/Python 2.7下工作得很好。它只是在Windows下,它失敗了。
任何想法,這可能會脫軌?
UPDATE:一些附加信息:'subpackage.py'導入一個擴展庫(我們稱之爲'utilites.pyd')。我可以導入其他「.py」模塊,不會導入它。
難道說實際的文件名和模塊名稱中有奇怪的字符嗎? – 2012-04-13 20:22:43
你會得到什麼例外? – 2012-04-13 20:24:01
PyRun_SimpleString不返回異常,只返回一個int(參見http://docs.python.org/c-api/veryhigh.html?highlight=pyrun_simplestring#PyRun_SimpleString)。 0表示成功,-1表示失敗。正如我所提到的,在一個cmd窗口中,我沒有任何異常或錯誤。 – djangodude 2012-04-13 20:26:08