Python 如何在使用PyInstaller编译pyodbc后修复开始时的错误?

Python 如何在使用PyInstaller编译pyodbc后修复开始时的错误?,python,ms-access,pyodbc,pyinstaller,Python,Ms Access,Pyodbc,Pyinstaller,我已经用python编写了一个程序(pyodbc和tkinter)。我使用pyodbc连接到Microsoft Access数据库 以下是连接代码: import pyodbc # Microsoft Access Database File DBfile = 'GDP.mdb' conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+DBfile) 在命令提示符(pythonmyprogram.py)中编译

我已经用python编写了一个程序(
pyodbc
tkinter
)。我使用
pyodbc
连接到Microsoft Access数据库

以下是连接代码:

import pyodbc

# Microsoft Access Database File
DBfile = 'GDP.mdb'
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+DBfile)
在命令提示符(
pythonmyprogram.py
)中编译之前启动它时,它工作得非常好。使用
pyinstaller
进行编译时,一切正常,不会报告任何错误

但是当尝试启动executabl时,它会显示主窗口2秒钟,然后消失

当我在
pyinstaller
中使用
-d
标志打开调试模式时,在启动可执行文件时显示以下错误:

Traceback (most recent call last):
File "<string>", line 62, in <module>
  pyodbc.Error: (
     'HY000', "[HY000] [Microsoft][Driver ODBC Microsoft Access]
     Can't find File'(Unknown)'. 
     (-1811) (SQLDriverConnect); [HY000] [Microsoft][Driver ODBC Microsoft Access]
     Can't find File'(Unknown)'.
     (-1811)")
RC: -1 from main

您需要使用绝对文件名,而不是本地文件:

import os

try:
    currdir = os.path.dirname(os.path.abspath(__file__))
except NameError:  # We are the main py2exe script, not a module
    import sys
    currdir = os.path.dirname(os.path.abspath(sys.argv[0]))
DBfile = os.path.join(currdir, 'GDP.mdb')

编辑:“紧急”在问题标题中不受欢迎。我们都有忙碌的生活。上面@Martijn Pieters的解决方案诊断出了我的问题(我需要将Access db的文件名更改为绝对文件名),但我不得不根据我的情况调整他的解决方案。当我按照他的指令加入当前目录,然后打印到终端的路径时,我看到路径中包含了我的.py文件名,这是不正确的,可能是因为我正在导入打开的函数并将db读取到该文件中。当我硬编码正确的绝对路径时,它工作得非常好。谢谢Martjin@詹斯特曼:是的,有一个
os.path.dirname()
调用丢失,现在添加。
import os

try:
    currdir = os.path.dirname(os.path.abspath(__file__))
except NameError:  # We are the main py2exe script, not a module
    import sys
    currdir = os.path.dirname(os.path.abspath(sys.argv[0]))
DBfile = os.path.join(currdir, 'GDP.mdb')