个人用到时所写,如有补充、不足或问题,可以联系更改
使用pyinstaller直接打包,可能你引用的包或目录文件出现有但查找不到,没有这样的文件。我们就要去找文件改代码,看路径,很麻烦。这时候就可以使用.spec打包
**安装 PyInstaller**:如果你还没有安装 `PyInstaller`,你可以通过以下命令安装:
pip install pyinstaller
使用pyinstaller直接打包
pyinstaller -c -F user_name.py -i user_name.ico
列举几个常用命令:
-D, --onedir 生成一个目录,可执行程序。
-F, --onefile 生成单个可执行文件。
-c, --console, --nowindowed 为标准 i/o 打开一个控制台窗口(默认选项)。在 Windows 中,如果第一个脚本是 ‘.pyw’ 文件,则此选项无效。简称(带控制台)
-w, --windowed, --noconsole 不提供用于标准 i/o 的控制台窗口。在 macOS 上,这也会触发构建一个 .app 捆绑程序。在 Windows 系统中,如果第一个脚本是 ‘.pyw’ 文件,则会自动设置该选项。在 *NIX 系统上,该选项将被忽略。简称(不带控制台,gui界面上非常有用)
-n NAME, --name NAME 为捆绑的应用程序和 spec 文件指定的名称(默认值:第一个脚本的名称)。
--i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">, --icon <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE"> FILE.ico:将图标应用于 Windows 可执行文件。FILE.exe,ID:从一个 exe 文件中提取带有 ID 的图标。FILE.icns:将图标应用到 macOS 的 .app 捆绑程序中。如果输入的图像文件不是对应平台的格式(Windows 为 ico,Mac 为 icns),PyInstaller 会尝试使用 Pillow 将图标翻译成正确的格式(如果安装了 Pillow)。使用 “NONE” 不应用任何图标,从而使操作系统显示默认图标(默认值:使用 PyInstaller 的图标)。该选项可多次使用。
使用 `PyInstaller` 生成 `.spec` 文件可以帮助你自定义打包过程。以下是如何生成 `.spec` 文件的步骤:
1. **生成 .spec 文件**:在命令行中进入你的 Python 脚本所在的目录,并运行以下命令(假设你的脚本名为 `your_script.py`):
pyinstaller --name=your_app_name --onefile --windowed your_script.py
- `--name`:指定生成的应用程序名称。
- `--onefile`:将所有文件打包成一个可执行文件。
- `--windowed`:在 Windows 上启动时隐藏命令行窗口(适用于 GUI 应用)。
上述命令会生成一个 `.spec` 文件(例如 `your_app_name.spec`)在当前目录。
2. **自定义 .spec 文件**:可以使用文本编辑器打开生成的 `.spec` 文件,进行一些自定义设置,比如:
- 添加数据文件(`datas`)
- 修改隐式导入(`hiddenimports`)
- 设置图标(`icon='your_icon.ico'`)
3. **使用 .spec 文件打包**:在修改 `.spec` 文件后,可以使用以下命令进行打包:
pyinstaller your_app_name.spec
通过这些步骤,你就能够生成并自定义 `.spec` 文件,用于控制打包过程。
自定义,如图:
block_cipher = None
a = Analysis(
['执行文件名'],
pathex=["C:\\Users\\user\\Desktop填写到项目文件的绝对路径"],
binaries=[],
datas=[
# 将同一目录的文件和其他需要的数据文件包括在内,如
(os.path.join("C:填写到项目文件的绝对路径", 'generate_img.py'), '.'),
(os.path.join("C:填写到项目文件的绝对路径", 'wechat_auto'), 'wechat_auto'),
(os.path.join("C:填写到项目文件的绝对路径", 'image.jpg'), '.'),
(os.path.join("C:填写到项目文件的绝对路径", 'text_generate.md'), '.'),
(os.path.join("C:填写到项目文件的绝对路径", 'ctrl_img.py'), '.'),
(os.path.join("C:填写到项目文件的绝对路径", 'text_img.py'), '.'),
(os.path.join("C:填写到项目文件的绝对路径", 'wechat_auto/__init__.py'), 'wechat_auto'),
(os.path.join("C:填写到项目文件的绝对路径", 'wechat_auto/wechat_c_v.py'), 'wechat_auto') # 导入同一目录文件夹下的自定义函数
],
hiddenimports=[
'wechat_auto/wechat_c_v','requests', 'urllib3' # 手动添加的模块名
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
cipher=block_cipher,
noarchive=False, # 是否显示控制台(终端)
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='py_tkinter_gui',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
contents_directory='.' # 打包到同一目录下(没有就添加)
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='执行文件名'
)
2297

被折叠的 条评论
为什么被折叠?



