Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Python/capi)";ModuleNotFoundError“;对于子目录中的模块_Python_C_Python 3.6_Python C Api - Fatal编程技术网

(Python/capi)";ModuleNotFoundError“;对于子目录中的模块

(Python/capi)";ModuleNotFoundError“;对于子目录中的模块,python,c,python-3.6,python-c-api,Python,C,Python 3.6,Python C Api,我正在C程序中使用Python3。我想做的是“运行”一个Python文件(.py),它将是一个更大Python项目的主文件 当我在这个Python文件中使用import时,它可以很好地用于同一目录中的其他Python文件。事实上,每当我在终端中使用“Python”运行.py文件时,import也适用于子目录中的文件 但是,如果我在C中使用PyRun\u SimpleFile运行它,我会收到一个“ModuleNotFoundError”错误 以下是我的目录设置: Project/ |-- Prog

我正在C程序中使用Python3。我想做的是“运行”一个Python文件(.py),它将是一个更大Python项目的主文件

当我在这个Python文件中使用
import
时,它可以很好地用于同一目录中的其他Python文件。事实上,每当我在终端中使用“Python”运行.py文件时,
import
也适用于子目录中的文件

但是,如果我在C中使用
PyRun\u SimpleFile
运行它,我会收到一个“ModuleNotFoundError”错误

以下是我的目录设置:

Project/
|-- Program.cpp
|-- Program.exe
|-- __init__.py
|-- bla.py
|-- Test/
|   |-- __init__.py
|   |-- bla2.py
最好不要使用
sys.path.append('./Test')
,这样就可以在导入中使用子目录名

以下是所有相关文件的内容:


布拉·皮

import Test.bla2

无聊的

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;
}
#包括
#包括
int main(int argc,字符**argv)
{
Py_初始化();
FILE*FILE=_Py_fopen(“bla.Py”、“r”);
PyRun_SimpleFile(文件“bla.py”);
Py_Finalize();
返回0;
}
您只需添加

PySys_SetArgv(1, argv);
Py_初始化之后
()。这会将程序所在的目录前置到Python路径。(这等同于将代码< >代码> >路径,而不是<代码> ./Test< /Cord>,但它应该更可靠,例如,如果程序不是从它自己的目录开始的,它就从C++中获得了程序所需的信息。
调用模块
Test
可能不是一个好主意。有一个内置的Python模块,名为
test
,在不区分大小写的操作系统(如Windows)上,可能会发生冲突并被加载

也许这可以帮助你:@Pablo谢谢你的建议;然而,这似乎与这里的问题无关。我确实试过一些答案,但没用。请记住,Python对我来说工作得非常好,只有在通过C程序运行时,导入语句才会引起问题。也许它可以帮助您在调用
PyRun\u SimpleFile
之前使用
setenv
并在
PYTHONPATH
中添加模块路径。可能正是你想要的。谢谢,很有魅力!^^然而,我确实收到了一个错误。我已经通过简单地将argv解析为wchar\u t**解决了这个问题,但也许有更好的方法来处理它<代码>错误:无法将参数“2”的“char**”转换为“wchar\u t**”,将其转换为“void PySys\u SetArgv(int,wchar\u t**)”PySys\u SetArgv(1,argv)啊-我在测试时不小心使用了Python 2而不是3,所以没有看到那个错误。。。我不知道有什么比解析更好的方法了。