从 exe 引用已安装的模块并忽略打包版本

Posted

技术标签:

【中文标题】从 exe 引用已安装的模块并忽略打包版本【英文标题】:Reference installed module from exe and ignore packaged version 【发布时间】:2019-02-12 10:21:38 【问题描述】:

我继承了一个 python 应用程序。该应用程序有一个使用 PyInstaller 编译的 exe,其中包含许多依赖项。它在与 exe 相同的文件夹中也有 .py 脚本。

应用程序使用Pymssqlmssql 数据库通信。我需要修改其中一个外部脚本,以便它与 azure 数据库通信。

这似乎是一项简单的任务。我修改了连接参数,安装了OpenSSLFreeTDS。但是,当我尝试连接时,我总是收到错误消息:“服务器需要加密,但未编译支持”。

我相信它使用的是exe中的pymssql模块,而不是新安装的版本。我可以看到 FreeTDS 的版本比较旧。

如何让应用程序忽略旧版本并使用系统安装的应用程序? 我尝试过类似:from sys import pymssql as pymssql2 但我只是得到错误无法导入名称pymssql

我没有用于创建 exe 的代码,并且不确定我是否拥有它使用的所有依赖项。因此,如果可能,我想避免创建新的 exe。

这是我第一次使用 python,所以如果我的术语都错了,我深表歉意!

【问题讨论】:

【参考方案1】:

你的处境很艰难。一旦程序被编译成exe,灵活性就很小了。编译后可以更改导入语句的唯一方法是源明确允许这样做。

尝试this 反编译。如果它有效,您可能会丢失源中的所有 cmets。

【讨论】:

以上是关于从 exe 引用已安装的模块并忽略打包版本的主要内容,如果未能解决你的问题,请参考以下文章

python 中 使用 pyinstaller 打包的exe程序如何调用外部模块?

为什么NuGet.exe打包忽略Configuration = Release参数?

Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件

python文件打包成exe文件,报错No module named mpl_toolkits.mplot3d

pyinstaller在64位系统下打包32位程序

UWP DEP0700: 应用程序注册失败。[0x80073CF9] 另一个用户已安装此应用的未打包版本。当前用户无法将该版本替换为打包版本。