将 Python 程序打包成可执行的 .exe
文件,通常使用工具如 PyInstaller
。这是一个常用的 Python 打包工具,可以将 Python 程序打包成独立的可执行文件,即使没有安装 Python 也能运行。
步骤:
1. 安装 PyInstaller
使用 conda 安装 PyInstaller
如果您使用的是 conda 环境,建议通过 conda 安装 PyInstaller:
conda install pyinstaller
这是在 conda 环境中进行安装的推荐方法,因为 conda 会自动处理依赖问题并确保兼容性。
用 pip 安装 PyInstaller
如果您使用的是 pip 作为包管理器,则可以使用以下命令安装:
pip install pyinstaller
这是在标准 Python 环境(非 conda 环境)中常用的方法。如果您没有使用 conda,pip 安装也是常见选择。
2. 进入你的项目目录
假设你已经将你的 Python 脚本(例如:main.py
或main.ipynb
)保存到某个目录中。使用命令行或终端进入这个目录:
cd path_to_your_python_script_directory
3. 使用 PyInstaller 打包为 EXE 文件
(1)处理 .py 文件的打包
如果你的 Python 文件已经是 .py 格式,直接使用 PyInstaller 打包即可。
pyinstaller --onefile --windowed main.py
如果您想给生成的 .exe 文件添加图标,可以使用 --icon 选项:
pyinstaller --onefile --windowed --icon=youricon.ico main.py
说明:
--onefile
:生成单个可执行文件。--windowed
(或-w
):用于 Windows GUI 程序,这样生成的可执行文件在运行时不会弹出控制台窗口(适用于 GUI 应用,如 tkinter 程序)。main.py
:是你 Python 脚本的文件名,确保你把它替换成你的脚本名。--icon=youricon.ico
:为生成的 .exe 文件设置自定义图标。youricon.ico 是图标文件的路径,你可以替换成你希望使用的图标文件的路径。如果不加这个选项,则生成的 .exe 文件会使用默认图标。请确保图标是.ico
格式
其他可用的参数:--clean
:清除先前构建的临时文件(即清除 PyInstaller 构建缓存和临时文件夹)。(如果你想手动删除构建痕迹,也可以删除 PyInstaller 生成的 build/ 和 dist/ 目录,以及 .spec 文件)--add-data
: 将额外的文件或文件夹打包进可执行文件。
例如:pyinstaller --add-data "path/to/datafile;./datafile" script.py
--key
: 使用加密密钥对源代码进行加密,防止反编译。
例如:pyinstaller --key "secretpassword" --onefile script.py
PyInstaller 从 v6.0 开始已经移除了字节码加密功能,即 --key=xxx 参数不再被支持。
(2)处理 .ipynb 文件的打包
Jupyter Notebook (.ipynb) 文件无法直接使用 PyInstaller 打包成 .exe,你需要将 .ipynb 文件转换为 .py 文件后再进行打包。
- 使用 Jupyter Notebook 提供的 nbconvert 工具:
jupyter nbconvert --to script main.ipynb
这会在同目录下生成一个 main.py 文件。
然后使用(1)中的步骤即可。
- 或者你也可以使用Jupyter Notebook 的 GUI将.ipynb 文件导出为 .py 文件
- 打开 Jupyter Notebook。
- 在主页导航到你要转换的 .ipynb 文件所在的目录。
- 点击文件打开 .ipynb 文件。
- 在页面顶部的菜单栏中,选择 File(文件) -> Download as(另存为) -> Python (.py)。
- Jupyter Notebook 会自动将 .ipynb 文件转换为 .py 文件并下载到你的本地。
- 如果你是使用的vscode的jupyter插件,那也可以用GUI导出
ctrl+shift+P
弹出命令栏,输入导出
4. 查找生成的 EXE 文件
打包完成后,PyInstaller 会在你的项目目录下创建一个 dist
文件夹,里面会有一个单独的 .exe
文件,例如:main.exe
。你可以直接运行该文件,程序会以独立的应用程序形式启动。
例子:
假设你的 Python 脚本是 main.py
,你可以这样运行:
pyinstaller --onefile --windowed main.py
PyInstaller 会在你的目录下创建如下的文件夹结构:
your_project/├── build/├── dist/│ └── main.exe <-- 这是可执行文件└── main.spec
main.exe
就是你打包好的可执行文件。
5. 打包后的依赖问题
在某些情况下,打包后的可执行文件可能仍然依赖某些动态链接库或系统文件。如果你发现生成的 exe
文件在其他电脑上运行时缺少某些文件,可以考虑将程序打包成 --onedir
格式,并将整个目录一起分发。此命令如下:
pyinstaller --onedir --windowed main.py
这将生成一个包含所有依赖文件的目录,用户可以通过点击该目录中的 main.exe
文件来启动程序。
6. 使用 .spec 文件自定义打包(可选)
PyInstaller 会生成一个 .spec
文件,供你自定义打包过程。你可以在生成的 .spec
文件中修改打包的行为,然后再次使用 .spec
文件打包:
pyinstaller your_spec_file.spec