我正在研究一个简单的(?)嵌入式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