gpt4 book ai didi

python - (Python/C API) "ModuleNotFoundError"用于子目录中的模块

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:50 25 4
gpt4 key购买 nike

我在 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!")

程序.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;
}

最佳答案

你只需要添加

PySys_SetArgv(1, argv);

Py_Initialize ( documentation ) 之后。这会将您的程序所在的目录添加到您的 Python 路径中。 (这相当于在路径前添加 .,而不是 ./Test,但它应该更可靠,例如,如果您的程序不是从其自己的目录启动的. 它从 C++ argv)

获取有关程序所在位置的所需信息

将您的模块称为 Test 可能不是一个好主意。有一个名为 test 的内置 Python 模块,在像 Windows 这样的不区分大小写的操作系统上,它可能会发生冲突并被加载。

关于python - (Python/C API) "ModuleNotFoundError"用于子目录中的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com