python - 在 C++ 中嵌入 python 时出现模块问题

标签 python c++ dll embed python-c-api

我正在为一个 .exe 程序制作一个 .dll 并将 python 嵌入其中。这个简单的 .py 程序运行良好

from time import *
##import OptimRestriction

def test_callsign(b):
    ...(simple script)
    return 

我所做的是将 .py 程序、Dll 和 Lib 文件夹复制到 xxx.exe 文件夹中,如所说 here .

但是一旦我取消注释 OptimRestriction 的导入,调试就会崩溃。首先,当调用初始化和处理 Python 的线程时,它开始加载符号:_ctypes.pyd_sockets.pydsst_pyd ,harshlib.pyd,unicodedata.pyd,tkinter.pyd, OptimRestriction 不使用的所有模块。

调试崩溃后给出的错误是:

xxx.exe 中 0x1E0AA0C5 (python27.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000004。

它在 _callthreadstart 函数处中断。

OptimRestriction 是一个导入大量模块(也在 .exe 文件夹中)的长程序。这是它的进口 list :

from GrafFunc import *
from LogFunc import *
from DinamicaFunc import *
from Dinamica2 import *
from CDR import *
...
import sys
import cProfile"

在我看来,线程启动时间太长,因为调试开始加载这些文件的时间很长,因此会出错。我对么?如果是这样,如果 OptimRestriction 及其 impots 不使用它们,为什么要加载这些文件?

编辑:新信息。它崩溃说 Can't import module 在此行: pModule = PyImport_Import(pName);

最佳答案

经过长时间将问题减少到某些代码行之后,我才发现问题出在某些模块打开 .txt 文件进行读取的行中。

我认为将 .txt 文件放在 .py 程序的同一文件夹中是正确的做法,但似乎我需要将它们复制到我的 c++ 插件的文件夹中(我认为那是因为当我在调试中,我的插件文件夹的系统路径已更改,因为 pyhton 的写入和读取是从那里完成的)

问题解决了!

关于python - 在 C++ 中嵌入 python 时出现模块问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23091112/

相关文章:

python - Flask:OSError:[Errno 98]地址已在使用中 - 但为什么?

java - 在java spring项目中使用delphi dll

python - 如何在 django admin 中添加编辑和删除按钮

c++ - C++ 中非常具体的解析

c++ - NACL 的 NPAPI 插件

c++ - 如何在 C++ 中消除可变参数函数与另一个函数的歧义

c# - 从 sql 存储过程加载和调用 C#(程序集)

c++ - 从注入(inject)进程的 DLL 调用函数并更改指针函数的地址

python - Django 模型 - 如何取消 on_delete=models.CASCADE

python - 多线程 TCP 套接字