python - C++ - 使用 numpy 嵌入 Python - 部署错误
问题描述
我正在尝试将带有 numpy 的 python 嵌入到 C++ 应用程序中。我正在使用 Windows 10 和 Visual Studio 2015。目前我安装了 Anaconda 和 WinPython(因为我使用的 Python 脚本只能与其中一个一起使用)。我没有任何与 python 相关的环境变量。
对于我的 C++ 应用程序,我使用的是 WinPython python,它安装了 numpy 和一些其他包。在使用 Visual Studio 时,我设法在我的应用程序中嵌入了 python 和 numpy,用于调试和发布。一切正常,python 已初始化,我可以使用 numpy 数组和函数。WinPython 使用正确。作为我的代码中的一个简单测试,我有:
_putenv_s("PYTHONPATH", ".");
Py_InitializeEx(0);
PyRun_SimpleString("import sys");
PyRun_SimpleString("print(sys.path)");
PyRun_SimpleString("print(sys.prefix)");
PyRun_SimpleString("print(sys.executable)");
PyRun_SimpleString("import importlib.machinery");
PyRun_SimpleString("print(importlib.machinery.all_suffixes())");
init_numpy2();
打印:
['C:\\DevC++\\Tesseler-Cmake\\build', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\python37.zip', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\DLLs', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\lib', 'C:\\DevC++\\Tesseler-Cmake\\build\\Release', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\lib\\site-packages', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\lib\\site-packages\\win32', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\lib\\site-packages\\win32\\lib', 'C:\\Git\\WPy64-3741\\python-3.7.4.amd64\\lib\\site-packages\\Pythonwin']
C:\Git\WPy64-3741\python-3.7.4.amd64
C:\DevC++\Tesseler-Cmake\build\Release\Tesseler.exe
['.py', '.pyw', '.pyc', '.cp37-win_amd64.pyd', '.pyd']
然后我在 Release 中使用 Wix 设置了一个安装程序,并检查了 Winpython python37.dll 是否随我的应用程序一起提供。但是当我运行我的程序时,我在调用 import_numpy2() 时遇到了这个错误:
['C:\\Tesseler', 'C:\\Tesseler\\python37.zip', 'C:\\Users\\Florian\\anaconda3\\Lib', 'C:\\Users\\Florian\\anaconda3\\DLLs', 'C:\\Users\\Florian\\anaconda3', 'C:\\Users\\Florian\\anaconda3\\lib\\site-packages', 'C:\\Users\\Florian\\anaconda3\\lib\\site-packages\\win32', 'C:\\Users\\Florian\\anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Users\\Florian\\anaconda3\\lib\\site-packages\\Pythonwin']
C:\Users\Florian\anaconda3
C:\Tesseler\Tesseler.exe
['.py', '.pyw', '.pyc', '.cp37-win_amd64.pyd', '.pyd']
ModuleNotFoundError: No module named 'numpy'
我不明白为什么将 anaconda 添加到 sys.path 和 sys.prefix 中,因为我在我的 Visual Studio 项目中从未对它进行任何引用,也没有任何环境变量引用它。我明白为什么使用 anaconda 中的 dll 会导致一些问题,但我使用 Process Explorer 检查了我的应用程序正在使用它附带的 python37.dll,就是这种情况。知道什么可能导致此错误吗?
更新:
按照这个线程中描述的想法,我设法通过创建一个 python 子文件夹并在其中复制整个 numpy、scipy、pandas 和 statsmodels 文件夹来使其工作(我的脚本需要这 4 个模块)。这些文件夹是从 复制的C:\Git\WPy64-3741\python-3.7.4.amd64\Lib\site-packages
。我还将这个 python 子文件夹添加到 PYTHONPATH:_putenv_s("PYTHONPATH", ".;./python");
无论如何,如果有人有更好的解决方案,我很想听到它,因为当我的应用程序大约 20 个月时,我发现必须捆绑这些模块(超过 600 个月)很烦人......
解决方案
推荐阅读
- flutter - 在颤动中删除下拉底线
- python - Win 错误 10060:我无法连接到服务器
- javascript - 加载特定页面时,如何在我的 Service Worker 上运行特定功能?
- javascript - 谷歌表格中的“脚本应用程序”是否会自动登录网站?
- javascript - 如何在 Angular 中为一个属性分配其他属性
- git - 克隆一个没有创建分支的拉取请求?
- python - 如何创建新变量而不是旧变量的链接?
- macos - 预期的可重定位表达式
- abbyy - Finereader 将图像中的多个表格识别为布局中的单个表格块
- embedded - 微程序与嵌入式系统之间的连接