Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决由于Firebird客户端库,我的Python exe没有在其他计算机上运行的问题_Python_Exe_Firebird_Pyinstaller - Fatal编程技术网

如何解决由于Firebird客户端库,我的Python exe没有在其他计算机上运行的问题

如何解决由于Firebird客户端库,我的Python exe没有在其他计算机上运行的问题,python,exe,firebird,pyinstaller,Python,Exe,Firebird,Pyinstaller,我已经用PyInstaller创建了一个Python exe 我的exe在“源”计算机上运行良好 当我尝试在其他计算机上运行它时,我遇到以下问题: C:\Users\maell\Desktop\CreateSQL app V1\app>app.exe Traceback (most recent call last): File "app.py", line 68, in <module> File "app.py", line 44, in show_DataBase

我已经用PyInstaller创建了一个Python exe

我的exe在“源”计算机上运行良好

当我尝试在其他计算机上运行它时,我遇到以下问题:

C:\Users\maell\Desktop\CreateSQL app V1\app>app.exe
Traceback (most recent call last):
  File "app.py", line 68, in <module>
  File "app.py", line 44, in show_DataBase_results
  File "usefull_fonctions_fdb.py", line 5, in open_database
  File "site-packages\fdb\fbcore.py", line 784, in connect
  File "site-packages\fdb\fbcore.py", line 220, in load_api
  File "site-packages\fdb\ibase.py", line 1385, in __init__
Exception: The location of Firebird Client Library could not be determined.
[9340] Failed to execute script app
C:\Users\maell\Desktop\CreateSQL app V1\app>app.exe
回溯(最近一次呼叫最后一次):
文件“app.py”,第68行,在
文件“app.py”,第44行,显示数据库结果
open_数据库中第5行的文件“usefull_fonctions_fdb.py”
文件“site packages\fdb\fbcore.py”,第784行,在connect中
加载api中的文件“site packages\fdb\fbcore.py”,第220行
文件“site packages\fdb\ibase.py”,第1385行,在_init中__
异常:无法确定Firebird客户端库的位置。
[9340]无法执行脚本应用程序
问题显然与Firebird客户端库有关。 我试图理解我为什么会遇到这个问题以及如何解决它

  • 我首先认为可能是因为fdb库是在“子文件”中导入的,所以它是一个隐藏的导入,PyInstaller没有看到它。我在主应用程序文件中导入了fdb,但问题仍然相同
  • 我还研究了我的环境变量,认为我的另一台计算机可能遗漏了一个关于fdb的变量,但我在“源”计算机中没有看到任何与fdb相关的环境变量
你知道我为什么会有这个问题吗?这是我需要放在exe目录中的文件吗?还是我必须告诉你的

编辑: 通过在my exe目录中添加fbclient.dll,错误已更改:

(base) C:\Users\maell\Desktop\app>app.exe
Traceback (most recent call last):
  File "app.py", line 67, in <module>
  File "app.py", line 43, in show_DataBase_results
  File "usefull_fonctions_fdb.py", line 5, in open_database
  File "site-packages\fdb\fbcore.py", line 848, in connect
fdb.fbcore.DatabaseError: ('Error while connecting to database:\n- SQLCODE: -904\n- unavailable database', -904, 335544375)
[11120] Failed to execute script app
(基本)C:\Users\maell\Desktop\app>app.exe
回溯(最近一次呼叫最后一次):
文件“app.py”,第67行,在
文件“app.py”,第43行,显示数据库结果
open_数据库中第5行的文件“usefull_fonctions_fdb.py”
文件“site packages\fdb\fbcore.py”,第848行,在connect中
fdb.fbcore.DatabaseError:(“连接到数据库时出错:\n-SQLCODE:-904\n-unavailable database”,-90435544375)
[11120]无法执行脚本应用程序

我检查了一下,数据库在良好的目录中(它在“源”计算机上工作)

总之,Firebird客户端库是Firebird服务器的一部分,而不是Python(虽然我不知道Python具体称什么为FCL,但希望它没有偏离标准术语),应该称为“fbclient.dll”,或者可以称为“fbedded.dll”或“gds32.dll”。但问题是,当您尝试实际连接到数据库服务器时,动态加载该DLL

文件“app.py”,第44行,显示数据库结果
open_数据库中第5行的文件“usefull_fonctions_fdb.py”

您的日志显示您的
app.exe
实际上试图连接到Firebird服务器以从某个“数据库”读取一些“结果”。为此,需要Firebird服务器。它丢失了,并且读取数据库失败

现在,为什么您的安装—不是安装的应用程序,只是安装—需要读取数据库,这对我来说很奇怪,但我不知道。 找到并修复它,这样安装程序本身就不会试图要求Firebird服务器读取Firebird数据库,那么错误就会消失

另请参见以下讨论:

p.p.S.还有,lifehack:

你有什么想法吗?是档案吗?还是什么


当你问自己这样的问题时-在抛出错误之前,尝试使用
SysInternals进程监视器
检查哪个特定文件(如果是文件)以及“app.exe”在哪个特定文件夹中查找。或者它寻找的是注册表数据而不是文件,等等-注册表日志也是由ProcMon累积的。

总之,Firebird客户端库是Firebird服务器的一部分,而不是Python(虽然我不知道Python具体称为FCL的是什么,但希望它没有偏离标准术语),应该称为“fbclient.dll”,或者可以作为“fbedded.dll”或“gds32.dll”。但问题是,当您尝试实际连接到数据库服务器时,动态加载该DLL

文件“app.py”,第44行,显示数据库结果
open_数据库中第5行的文件“usefull_fonctions_fdb.py”

您的日志显示您的
app.exe
实际上试图连接到Firebird服务器以从某个“数据库”读取一些“结果”。为此,需要Firebird服务器。它丢失了,并且读取数据库失败

现在,为什么您的安装—不是安装的应用程序,只是安装—需要读取数据库,这对我来说很奇怪,但我不知道。 找到并修复它,这样安装程序本身就不会试图要求Firebird服务器读取Firebird数据库,那么错误就会消失

另请参见以下讨论:

p.p.S.还有,lifehack:

你有什么想法吗?是档案吗?还是什么


当你问自己这样的问题时-在抛出错误之前,尝试使用
SysInternals进程监视器
检查哪个特定文件(如果是文件)以及“app.exe”在哪个特定文件夹中查找。或者它查找注册表数据而不是文件等-注册表日志也由ProcMon累积。

虽然FDB是连接Firebird的Python驱动程序,但它也需要本地Firebird客户端库(
fbclient.dll
在Windows上,
libfbclient.so
在Linux上)。我不知道PyInstaller,但我假设它只打包Python代码或在特定位置需要本机依赖项

该错误表示您的系统上没有安装Firebird客户端库,或者如果安装了Firebird客户端库,则它的位数与Python可执行文件的位数不同。如果Python是32位的,则需要32位Firebird客户端库,如果是64位,则需要64位

您需要安装Firebird客户端库(例如使用Firebird i