在未安装 Python 的计算机上的 VB.net 程序中调用嵌入了 python 模块的 VC++ dll

问题描述 投票:0回答:1

嗨,我构建了一个带有嵌入式Python模块的VC++ DLL,并在VB.net程序中调用了该DLL的函数(通过Python模块工作)进行计算。在这台安装了 Python 的计算机上,一切都按预期运行。然后我将整个VB.net程序(包括bin \ debug文件夹中的.dll,.lib,.pdb,.exp)复制到安装了VS.net但没有安装Python的计算机上。当我在第二台计算机上调试此 vb.net 程序时,显示以下错误:
致命Python错误:init_fs_encoding:无法获取文件系统编码的Python编解码器 Python运行时状态:核心已初始化 ModuleNotFoundError:没有名为“编码”的模块

当前线程 0x00001dd4(最近调用优先):

有谁知道我无法在未安装 python 的计算机上调用 python 嵌入式 VC++ dll 的原因是什么? 谢谢

确认所有的python包含、依赖、库都添加到VC++ dll中;检查 PYTHONHOME 环境变量;将本机 DLL 转换为 .NET 程序集或 COM 组件

python vb.net visual-c++ dllimport
1个回答
0
投票

我成功了。远非完美,但至少在某种程度上它是一个实用的解决方案。我把它放在这里以防有人遇到类似的问题。 我下载了 python 可嵌入包,并在 site-packages 文件夹下添加了所需的唯一包。然后将这些可嵌入的库链接起来并包含到我的 VC++ dll 项目中。在目标计算机中,将这些嵌入包复制到 VB.Net 程序 exe 和 VC++ dll 文件所在的文件夹中。 作为比较,我的常规 python3.10.11 包是 7.6GB,我的嵌入式包(添加了 numpy 和 scipy)是 225MB。它是一个适合程序分发的合理大小的包。 希望有更好的解决方案,但这就是我到目前为止所能得到的。

© www.soinside.com 2019 - 2024. All rights reserved.