问题描述
我在我的 C++ 应用程序中使用带有静态链接的 python39,并使用 win32pipe 和 win32file 调用 python 脚本。每次运行我都会强制执行一个错误 ImportError: DLL load failed while importing win32file: The specified module could not be found.. 模块的所有路径都是通过 PyConfig 配置的,所以它看起来像
wchar_t* filename = Py_DecodeLocale(argv[0],nullptr);
auto pySysPath = _getPySysPath();
std::wstring pathVar = pySysPath;
const wchar_t* path = _wgetenv(L"PATH");
if (path) {
pathVar += path;
}
Py_SetPath(pathVar.c_str());
Py_SetPythonHome(_wgetenv(L"PYROOT"));
Py_SetProgramName(filename);
PyConfig pyConfig;
PyConfig_InitIsolatedConfig(&pyConfig);
PyConfig_SetBytesArgv(&pyConfig,argc,argc ? argv : nullptr);
PyConfig_SetString(&pyConfig,&pyConfig.pythonpath_env,pySysPath.c_str());
PyConfig_SetString(&pyConfig,&pyConfig.program_name,pyProgramName);
Py_DebugFlag = true;
pyConfig.isolated = false;
pyConfig.dev_mode = true;
pyConfig.verbose = 2;
pyConfig.parse_argv = true;
pyConfig.dev_mode = true;
pyConfig.use_environment = true;
pyConfig.write_bytecode = true;
auto status = Py_InitializeFromConfig(&pyConfig);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
我从 _getPySysPath()
生成的路径使用这个:
static const std::vector<const wchar_t*> _pySysPathes = {
L"Lib\\site-packages\\pywin32_system32",L"Lib\\site-packages\\win32",L"Lib\\site-packages",L"python39.zip",L"DLLs",L"lib",L"lib\\site-packages",L"lib\\site-packages\\win32",L"lib\\site-packages\\win32\\lib",L"lib\\site-packages\\Pythonwin"};
尽管有错误,但我使用 python3.9 时没有错误,它已从官方网站作为二进制文件安装在我的系统上。
附言
详细级别 2 告诉我 _find_and_load
中发生错误,但它什么也没告诉我。
完整回溯:
# code object from 'C:\\Users\\j35u5\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32\\lib\\__pycache__\\pywin32_bootstrap.cpython-39.pyc'
import 'pywin32_bootstrap' # <_frozen_importlib_external.SourceFileLoader object at 0x000001D305D83BB0>
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\pywin32_system32\win32file.cp39-win_amd64.pyd
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\pywin32_system32\win32file.pyd
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\pywin32_system32\win32file.py
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\pywin32_system32\win32file.pyw
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\pywin32_system32\win32file.pyc
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\win32\win32file.cp39-win_amd64.pyd
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\Lib\site-packages\win32\win32file.pyd
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\lib\encodings\ascii.cp39-win_amd64.pyd
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\lib\encodings\ascii.pyd
# trying C:\Users\j35u5\AppData\Local\Programs\Python\Python39\lib\encodings\ascii.py
# C:\Users\j35u5\AppData\Local\Programs\Python\Python39\lib\encodings\__pycache__\ascii.cpython-39.pyc matches C:\Users\j35u5\AppData\Local\Programs\Python\Python39\lib\encodings\ascii.py
# code object from 'C:\\Users\\j35u5\\AppData\\Local\\Programs\\Python\\Python39\\lib\\encodings\\__pycache__\\ascii.cpython-39.pyc'
import 'encodings.ascii' # <_frozen_importlib_external.SourceFileLoader object at 0x000001D305D833A0>
Traceback (most recent call last):
File "C:\Users\j35u5\Sources\scanner\src\pymodules\test.py",line 2,in <module>
import win32file
File "<frozen importlib._bootstrap>",line 1007,in _find_and_load
File "<frozen importlib._bootstrap>",line 986,in _find_and_load_unlocked
File "<frozen importlib._bootstrap>",line 666,in _load_unlocked
File "<frozen importlib._bootstrap>",line 565,in module_from_spec
File "<frozen importlib._bootstrap_external>",line 1108,in create_module
File "<frozen importlib._bootstrap>",line 228,in _call_with_frames_removed
ImportError: DLL load failed while importing win32file: The specified module could not be found.
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)