使用py2ex将sqldrivers绑定到.exe中

2024-09-25 08:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的第一次尝试中,与py2exe捆绑在一起的pyQt应用程序拒绝连接到sqlite数据库,尽管它在python版本中工作。 我猜是库没有加载到.exe应用程序中的问题。我通过将sqlite DLL的完整路径包含到setup.py文件中并将此DLL复制到可执行文件夹中,解决了这个问题。在

现在我想在.exe文件中包含这个DLL,以便对我的用户“隐藏”这个DLL。你知道怎么做吗?

我的电流设置.py公司名称:

from distutils.core import setup
import py2exe

setup(
  windows=[{
      "script": 'myscript.py'
  }],
  options={
      'py2exe': {
          "dll_excludes": [
              "MSVCP90.dll",
              "MSWSOCK.dll",
              "mswsock.dll",
              "powrprof.dll",
              ],

          'includes': [
              'sip',
              'PyQt4.QtNetwork',
              ],
         'bundle_files': 1,
      }
  },
  data_files = [
        'config.ini',
        'template.htm',

        # This is the File that I wish to be "hidden"
        ('sqldrivers', ('C:\Python27\Lib\site-packages\PyQt4\plugins\sqldrivers\qsqlite4.dll',)),

  zipfile=None,
)

Tags: 文件pyimport数据库应用程序sqlitesetupfiles
1条回答
网友
1楼 · 发布于 2024-09-25 08:40:32

我遇到了同样的问题,而你已经解决了一半。问题的第一部分是您确定的,将文件放入EXE。我不能说你的py2exe解决方案的正确性,因为我正在使用pyinstaller,但这是一般的想法。您需要将qsqlite4.dll放入单个文件应用程序中的sqldrivers目录中。在

第二部分是main.py需要将路径添加到其运行目录中,该目录现在将包含该sqldrivers文件夹。您需要做的是获取main.py运行位置的相对路径,并将该目录设置为QT应用程序中的库路径。我对pyinstaller使用标准的resource_path()函数,但对py2exe使用类似的方法应该有效:

def resource_path(relative_path)
    if sys.frozen:
        base_path = os.path.dirname(sys.executable)
    else:
        base_path = os.path.dirname(__file__)
    return os.path.join(base_path, relative_path)

然后可以在应用程序的主函数中使用此代码

^{pr2}$

加上日志,这是我的应用程序库路径()前后:

08/25/2014 01:33:24 AM CRITICAL: Before[u'C:/dev/WORKSP~1/db/dist']
08/25/2014 01:33:24 AM CRITICAL: After[u'C:/dev/WORKSP~1/db/dist', u'C:\\Users\\jeff\\AppData\\Local\\Temp\\_MEI2042\\']

你可以把“\”替换成“/”,但我没有费心,它仍然适用于windows分隔符。在

相关问题 更多 >