2 回答

TA貢獻1876條經驗 獲得超5個贊
在熟悉 PyInstaller 包后,我能夠找出問題所在。我按照以下步驟使其最終為我工作。
現在,發布我的答案以幫助他人:)
## Build *.so files from python modules
1. Execute "setup.py" file
> python setup.py build
2. It will generate "*.so" modules inside "build/lib.linux-x86_64-3.6" dir.
## Created binary from cython modules
1. Copy the binaries (i.e. *.so) files into binary folder
2. Get inside the binary folder 'cd binary'
3. Run Pyinstaller command inside binary directory: `python -O -m PyInstaller --clean --onefile idps.spec`
4. Your binary will be inside dist folder 'binary/dist/'
5. Execute the binary in linux using './dist/sample_app'
6. Your app is ready :)
這是使它對我有用的規范文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['cython_pyinstaller_sample/binary'],
binaries=[('program_a.cpython-36m-x86_64-linux-gnu.so', '.'),('program_b.cpython-36m-x86_64-linux-gnu.so', '.')],
datas=[('config_file.txt', '.')],
hiddenimports=['licensing', 'licensing.methods', 'pandas'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False) pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher) exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='sample_app',
debug=True,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )

TA貢獻1804條經驗 獲得超8個贊
以防萬一有人在尋找快速解決方案。
我遇到了同樣的情況,并找到了一種快速/骯臟的方式來完成這項工作。問題是 pyinstaller 沒有在 .exe 文件中添加運行程序所需的必要庫。
您需要做的就是將所需的所有庫(和 .so 文件)導入 main.py 文件(調用 program_a.py 和 program_b.py 的文件)。例如,假設 program_a.py 使用 opencv 庫 (cv2) 而 program_b.py 使用 matplotlib 庫?,F在在您的 main.py 文件中,您還需要導入 cv2 和 matplotlib?;旧希瑹o論你在 program_a.py 和 program_b.py 中導入什么,你也必須在 main.py 中導入它。這告訴 pyinstaller 程序需要這些庫,并將這些庫包含在 exe 文件中。
添加回答
舉報