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