我正在为一个 .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
, 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/