所以,讓我們說我有一個簡單的PyQt的應用main.py
:如何用pyinstaller清理打包的Python應用程序?
import sys
from PyQt5 import QtWidgets
def main():
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
後來,我被一個main.spec
其打包的應用程序在一個文件夾中:
# -*- mode: python -*-
block_cipher = None
import inspect, os
current_path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
a = Analysis(['main.py'],
pathex=[current_path],
binaries=[],
datas=[],
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,
exclude_binaries=True,
name='main',
debug=False,
strip=False,
upx=False,
console=True)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=False,
name='main')
做pyinstaller main.spec
的結果將是工作pyqt應用程序,其中有一堆文件:
所以,這裏的東西,我不喜歡目前的結果,我也不喜歡使用--onefile(提取文件到臨時目錄的想法不是我的一杯茶)的選項。
現在,我發現了這個有趣的article,它提出了一個解決這個問題的方法,我試圖用這個簡單的mcve在這裏重現它,但由於某些原因,我在某個點上卡住了。下面是我遵循的步驟:
1)I已經創建了一個文件pyinstaller\use_lib.py
:在上述main.spec
文件
3)I
import sys
import os
sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), "lib"))
2)我已經更換runtime_hooks=[]
通過runtime_hooks=['.\\pyinstaller\\use_lib.py']
重新運行pyinstaller main.spec
,這已經產生了一堆亂七八糟的文件,如上面的截圖
4)我已經手動將所有依賴文件移動到lib目錄,結果是這樣的:
問題:當我嘗試運行應用程序將崩潰:
爲什麼你認爲它的崩潰?在哪一步我搞砸了?你能解釋我如何解決它嗎?