下面是针对“关于pyinstaller 打包多个py文件的问题”的完整攻略。
1. 安装pyinstaller
首先需要安装pyinstaller,可以使用pip命令安装。在终端输入以下命令:
pip install pyinstaller
2. 打包单个Python文件
如果只需要打包单个Python文件,可以使用以下命令:
pyinstaller example.py
其中example.py为需要打包的Python文件名。在执行完毕后,将在dist目录下生成打包后的可执行文件和相关依赖文件。
3. 打包多个Python文件
如果需要打包多个Python文件,需要使用spec文件。spec文件是一个文本文件,其中包含Python脚本及其依赖的库信息等。
比如,我们有两个Python文件example1.py和example2.py需要打包。首先需要生成spec文件,在终端输入以下命令:
pyinstaller --name=example --add-data 'example1.py;.' --add-data 'example2.py;.' example1.py
其中,--name指定生成的可执行文件名,--add-data指定需要一起打包的Python文件及其路径(分号前为文件路径,分号后为文件在可执行文件内的相对路径),最后一个参数为需要打包的Python文件。
执行完毕后,在dist目录下会生成一个example.spec文件。修改spec文件,将需要一起打包的Python文件的路径和名字添加到datas列表中。示例spec文件如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['example1.py'],
pathex=['/Users/username/path/to/example'],
binaries=[],
datas=[('/Users/username/path/to/example/example1.py', '.'),('/Users/username/path/to/example/example2.py', '.')],
hiddenimports=['example2'],
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='example',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
upx_protect=[],
upx_obfuscate=False,
upx_gains=0,
upx_force=False,
upx_level=None,
upx_preset=None)
最后,在终端输入以下命令,执行打包操作:
pyinstaller example.spec
执行完毕后,在dist目录下会生成一个可执行文件和相关依赖文件。
示例说明
示例1:打包包含GUI界面的多个Python文件
假设我们有两个Python文件example_gui.py和example_other.py需要打包,其中example_gui.py包含一个GUI界面。在打包时需要添加PyQt5库以支持GUI界面的打包。具体步骤如下:
- 安装PyQt5库
在终端输入以下命令进行安装:
pip install PyQt5
- 生成spec文件
在终端输入以下命令生成.spec文件:
pyinstaller --name=example --add-data 'example_gui.py;.' --add-data 'example_other.py;.' example_gui.py
修改spec文件,添加PyQt5库的路径和名字:
```
# -- mode: python ; coding: utf-8 --
block_cipher = None
a = Analysis(['example_gui.py'],
pathex=['/Users/username/path/to/example'],
binaries=[],
datas=[('/Users/username/path/to/example/example_gui.py', '.'),
('/Users/username/path/to/example/example_other.py', '.'),
('/Users/username/path/to/venv/lib/python3.6/site-packages/PyQt5/Qt/plugins/platforms/qwindows.dll', 'platforms'),
('/Users/username/path/to/venv/lib/python3.6/site-packages/PyQt5/Qt/libEGL.dll', '.'),
('/Users/username/path/to/venv/lib/python3.6/site-packages/PyQt5/Qt/libGLESv2.dll', '.'),
('/Users/username/path/to/venv/lib/python3.6/site-packages/PyQt5/Qt/libwinpthread-1.dll', '.')
],
hiddenimports=['example_other'],
hookspath=[],
runtime_hooks=[],
excludes=['tkinter'],
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='example',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
upx_protect=[],
upx_obfuscate=False,
upx_gains=0,
upx_force=False,
upx_level=None,
upx_preset=None)
```
- 执行打包操作
在终端输入以下命令执行打包操作:
pyinstaller example.spec
示例2:打包包含依赖库的多个Python文件
假设我们有两个Python文件example1.py和example2.py需要打包,其中example1.py依赖于requests库和beautifulsoup4库。具体步骤如下:
- 安装requests库和beautifulsoup4库
在终端输入以下命令进行安装:
pip install requests beautifulsoup4
- 生成spec文件
在终端输入以下命令生成.spec文件:
pyinstaller --name=example --add-data 'example1.py;.' --add-data 'example2.py;.' example1.py
修改spec文件,添加requests库和beautifulsoup4库的路径和名字:
```
# -- mode: python ; coding: utf-8 --
block_cipher = None
a = Analysis(['example1.py'],
pathex=['/Users/username/path/to/example'],
binaries=[],
datas=[('/Users/username/path/to/example/example1.py', '.'),
('/Users/username/path/to/example/example2.py', '.'),
('/Users/username/path/to/venv/lib/python3.6/site-packages/requests', 'requests'),
('/Users/username/path/to/venv/lib/python3.6/site-packages/bs4', 'bs4')
],
hiddenimports=['example2'],
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='example',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
upx_protect=[],
upx_obfuscate=False,
upx_gains=0,
upx_force=False,
upx_level=None,
upx_preset=None)
```
- 执行打包操作
在终端输入以下命令执行打包操作:
pyinstaller example.spec
以上就是关于“关于pyinstaller 打包多个py文件的问题”的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于pyinstaller 打包多个py文件的问题 - Python技术站