我在C程序中使用Python 3。我想做的是“运行”一个Python文件(.py),它将成为更大的Python项目的主要文件。
当我在这个Python文件中使用import
时,它适用于同一目录中的其他Python文件。实际上,每当我在终端中使用“Python”运行.py文件时,import
也适用于子目录中的文件。
但是,如果我在C中使用PyRun_SimpleFile
运行它,则会收到“ModuleNotFoundError”错误。
这是我的目录设置:
Project/
|-- Program.cpp
|-- Program.exe
|-- __init__.py
|-- bla.py
|-- Test/
| |-- __init__.py
| |-- bla2.py
最好,我不想使用sys.path.append('./Test')
,因此我可以在导入中使用子目录名称。
以下是所有相关文件的内容:
bla.py
import Test.bla2
bla2.py
print("in bla2.py now!")
Program.cpp
#include <Python.h>
#include <iostream>
int main(int argc, char **argv)
{
Py_Initialize();
FILE *file = _Py_fopen( "bla.py", "r" );
PyRun_SimpleFile(file, "bla.py");
Py_Finalize();
return 0;
}
答案 0 :(得分:1)
你只需要添加
PySys_SetArgv(1, argv);
在Py_Initialize
(documentation)之后。这会将您的程序所在的目录添加到Python路径中。 (这相当于将.
添加到路径而不是./Test
,但它应该更可靠,例如,如果您的程序不是从其自己的目录启动的。它获取所需的信息您的程序位于C ++ argv
)
调用模块Test
可能不太好。有一个名为test
的内置Python模块,在一个不敏感的操作系统上,如Windows,可能会发生冲突并被加载。