簡體   English   中英

如何將 cx_oracle 與 Pyinstaller 捆綁在一起

[英]How to bundle cx_oracle with Pyinstaller

我的目標是使用 Pyinstaller 從一個使用 Tkinter 和 cx_oracle 訪問數據庫的簡單 python 腳本中捆綁一個 exe 文件。 python代碼是在安裝了Anaconda、cx_oracle包和oracle客戶端的windows機器上開發的。 然后我需要在許多沒有oracle 客戶端或 Python 的目標 Windows 機器上運行 exe 文件。

我在開發機器上使用 Python 2.7 和 Pyinstaller 3.1。

我在網上搜索了一段時間,但只找到了一個教程: https : //mail.python.org/pipermail/tutor/2014-December/103608.html

我按照相同的步驟修改了規范文件,如下所示:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['mycode.py'],
             pathex=['C:\\Users\\myuser\\PycharmProjects\\mycode'],
             binaries=None,
             datas=None,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries + [('oraociei11.dll','D:\ProgramFiles\Anaconda2\oraociei11.dll','BINARY')],
          a.zipfiles,
          a.datas,
          name='mycode',
          debug=False,
          strip=False,
          upx=True,
          console=True )

捆綁工作。 代碼在安裝了 oracle 客戶端的原始機器上運行。 但是在沒有 oracle 客戶端的單獨機器上,它無法運行,並顯示以下錯誤消息:

Tkinter 回調 Traceback 中的異常(最近一次調用最后一次):文件“lib-tk\\Tkinter.py”,第 1537 行,調用文件“”,第 152 行,登錄數據庫錯誤:DPI-1047:64 位 Oracle 客戶端庫不能被加載:“找不到指定的模塊”。 請參閱https://oracle.github.io/odpi/doc/installation.html#windows尋求幫助

現在我很困惑,將 python 腳本中的 exe 安全地與 cx_oracle 捆綁在一起,以便它可以在沒有 oracle 客戶端的 Windows 機器上運行,需要哪些步驟? 還是我“必須”在目標機器上安裝 oracle 客戶端?

我真的希望找到比我在上面找到的舊鏈接更詳細的關於將 cx_oracle 與 pyinstaller 捆綁在一起的教程。

cx_Oracle 需要 Oracle 客戶端。 需要安裝在目標機器上! 請注意錯誤消息中的鏈接: https://oracle.github.io/odpi/doc/installation.html#windows 它應該可以幫助您完成讓 cx_Oracle 在目標機器上工作所需的一切。

感謝您發布這個問題。 你走在正確的道路上。 您只缺少其他 .dll 文件。 您需要將在 Oracle 即時客戶端文件夾中找到的所有 .dll 文件添加到 .spec 文件中。 有關我為即時客戶端 19.10 所做的示例,請參見下面的示例:

a.binaries = a.binaries + [('oraociei19.dll','.\\instantclient_19_10\\oraociei19.dll','BINARY')]

  • [('orannzsbb19.dll','.\\instantclient_19_10\\orannzsbb19.dll','BINARY')]
  • [('oraocci19d.dll','.\\instantclient_19_10\\oraocci19d.dll','BINARY')]
  • [('oraocci19.dll','.\\instantclient_19_10\\oraocci19.dll','BINARY')]
  • [('oci.dll','.\\instantclient_19_10\\oci.dll','BINARY')]
  • [('ocijdbc19.dll','.\\instantclient_19_10\\ocijdbc19.dll','BINARY')]
  • [('ociw32.dll','.\\instantclient_19_10\\ociw32.dll','BINARY')]
  • [('oramysql19.dll','.\\instantclient_19_10\\oramysql19.dll','BINARY')]
  • [('oraons.dll','.\\instantclient_19_10\\oraons.dll','BINARY')]
  • [('orasql19.dll','.\\instantclient_19_10\\orasql19.dll','BINARY')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM