Debug模式下C++调用PyRun_SimpleString导入PIL失败的原因及解决
问题:Debug模式下C++调用Python EasyOCR/PIL触发ImportError
环境配置
- Windows 11 x64
- Visual Studio 2022
- Python 3.11.3(已安装调试符号,项目Debug配置指定链接
python311_d.lib) - Pillow 10.4.0
- easyocr 1.7.2
核心代码
C++中调用Python的关键代码片段:
Py_Initialize(); PyRun_SimpleString("import sys"); PyRun_SimpleString("import easyocr"); //Other codes
问题现象
- Release模式下程序运行完全正常
- 切换到Debug模式时,触发运行时错误,报错信息如下:
Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Python311\Lib\site-packages\easyocr\__init__.py", line 1, in <module> from .easyocr import Reader File "C:\Python311\Lib\site-packages\easyocr\easyocr.py", line 3, in <module> from .recognition import get_recognizer, get_text File "C:\Python311\Lib\site-packages\easyocr\recognition.py", line 1, in <module> from PIL import Image File "C:\Python311\Lib\site-packages\PIL\Image.py", line 100, in <module> from . import _imaging as core ImportError: cannot import name '_imaging' from 'PIL' (C:\Python311\Lib\site-packages\PIL\__init__.py)
- 尝试将
PyRun_SimpleString("import easyocr");替换为PyRun_SimpleString("from PIL import Image");,仍报相同错误 - 额外测试:使用调试版
python_d.exe执行导入语句,同样触发相同错误:
PS C:\Users\15819> python_d Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:34:25) [MSC v.1934 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. C:\Python311\Lib\site-packages\pyreadline3\lineeditor\history.py:87: ResourceWarning: unclosed file <_io.TextIOWrapper name='C:\\Users\\15819\\.python_history' mode='r' encoding='utf-8'> for line in open(filename, 'r', encoding='utf-8'): ResourceWarning: Enable tracemalloc to get the object allocation traceback >>> import sys >>> import easyocr Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python311\Lib\site-packages\easyocr\__init__.py", line 1, in <module> from .easyocr import Reader File "C:\Python311\Lib\site-packages\easyocr\easyocr.py", line 3, in <module> from .recognition import get_recognizer, get_text File "C:\Python311\Lib\site-packages\easyocr\recognition.py", line 1, in <module> from PIL import Image File "C:\Python311\Lib\site-packages\PIL\Image.py", line 100, in <module> from . import _imaging as core ImportError: cannot import name '_imaging' from 'PIL' (C:\Python311\Lib\site-packages\PIL\__init__.py) >>> from PIL import Image Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python311\Lib\site-packages\PIL\Image.py", line 100, in <module> from . import _imaging as core ImportError: cannot import name '_imaging' from 'PIL' (C:\Python311\Lib\site-packages\PIL\__init__.py)
咨询内容
- 该错误产生的原因是什么?
- 如何在Visual Studio中调试该程序?
内容的提问来源于stack exchange,提问作者Object Unknown
相关产品推荐
相关产品推荐

