嵌入Python错误:不支持按文件名导入

7 投票
2 回答
8814 浏览
提问于 2025-04-17 13:22

我正在尝试把Python嵌入到我的应用程序中,但一开始就遇到了麻烦。

我把Python嵌入到我的C++应用程序里,使用的是这个教程里的代码:http://docs.python.org/2/extending/embedding.html#pure-embedding

我的应用程序完全符合要求,并且编译时没有任何错误。但是在运行应用程序时,pModule = PyImport_Import(pName); 这一行出错了,返回了0,这意味着我从PyErr_Print()得到的错误信息是:

Failed to load "C:\Users\workspace\dpllib\pyscript.py"
ImportError: Import by filename is not supported.

这个应用程序是通过命令 C:\Users\workspace\ndnlib\pyscript.py multiply 50 150 来调用的。

2 个回答

0

如果你把文件做成一个模块,那会简单很多。

比如,你可以这样做:

创建这个文件:

<project>/MyModule/__init__.py

然后运行你的文件 <project>/script.py

dyn_module_name = (... get module name 'MyModule' from console arguments ...)
my_dynamic_module = __import__(dyn_module_name)

因为它是一个模块,所以在你执行 script.py 的时候,它会自动加载。

7

我不太确定,但我觉得因为pName被设置为argv[1],而你又是用完整路径来调用这个脚本,所以argv[1]就是完整路径。这就意味着代码会尝试导入“C:\Users\workspace\dpllib\pyscript.py”,但Python是不能这样导入的,它只能导入“pyscript”。

你可以试着在这个目录下直接输入“pyscript.py”来运行脚本,看看错误信息是否变成“无法加载‘pyscript.py’”。如果变了,那你就需要修改代码,让它不只是导入argv[1],而是处理这个字符串,得到一个模块名,而不是文件名。

撰写回答