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 库。现在在您的 main.py 文件中,您还需要导入 cv2 和 matplotlib。基本上,无论你在 program_a.py 和 program_b.py 中导入什么,你也必须在 main.py 中导入它。这告诉 pyinstaller 程序需要这些库,并将这些库包含在 exe 文件中。
添加回答
举报