【问题标题】:Trouble with modules while embedding python in C++在 C++ 中嵌入 python 时出现模块问题
【发布时间】:2014-05-30 05:51:19
【问题描述】:

我正在为 .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.pyd,sst_pyd,harshlib.pyd,unicodedata.pyd,tkinter.pyd,@987654330 的所有模块@ 不使用。

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

Unhandled exception at 0x1E0AA0C5 (python27.dll) in xxx.exe: 0xC0000005: Access violation reading location 0x00000004.

它在_callthreadstart 函数上中断。

OptimRestriction 是一个很长的程序,它导入了很多模块(也在 .exe 文件夹中)。以下是它的导入列表:

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

在我看来,线程启动时间太长,因为调试开始加载这些文件很长时间,所以它给出了错误。我对么?如果是这样,如果OptimRestriction 及其导入器不使用这些文件,为什么还要加载这些文件?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    问题解决了!

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 2021-09-27
      • 2016-11-05
      • 2020-10-14
      • 2017-08-12
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      相关资源
      最近更新 更多