pyinstaller 简介
知道的就跳过本章
python 属于脚本语言,只要有 python 就能运行 .py 文件。而 pyinstaller 是可执行文件文件生成工具,约等于编译工具。
以 windows 为例,在 A 计算机上生成的 exe,复制到 B 计算机可以直接运行(B 上面不需要安装 python 或其他任何动态库);唯一的限制是不能用 A 生成的 64位 exe 到 32位操作系统的 B 上运行。
所以适应性好的方式是始终生成 32位的 exe——即使 A 是 64位操作系统,安装 32位的 python 就行。
需求
python 虽然内置了pip工具方便在线安装、更新库,但是还是会有不成功的时候,比如:
- 封闭的内网环境,网关阻止的绝大多数的下载,怎么办?
- 有些安装包pip就是死活下载不下来(比如pyinstaller),怎么办?
步骤
所以有必要把离线安装包做个备份,供网络顺畅的计算机上下载,然后:
- 通过邮件发送
- 或者用U盘(手机就是个U盘),经安全员检查后进入内网
同时记录整个安装步骤。最初来源于《PyInstaller离线安装-window版本》,前人的功劳不能忽略,毕竟找出了需要的库和下载位置。
又根据最新的版本做了整理,还加了 python 的安装说明。
步骤 | 文件 | 在线源 | 备份下载 | 安装方式 |
---|---|---|---|---|
1.1 | python-3.8.3-win32-installer.exe | python.org | python-3.8.3-win32+pip-22.3.1-setup.rar | 双击安装 ☆1 |
1.2 | pip-22.3.1-py3-none-any.whl | ...>python -m pip install --upgrade pip | 同上 | pip install pip-22.3.1-py3-none-any.whl ☆2 |
2.1 | future-0.18.3.tar.gz | pypi.org | PyInstaller-required-20230120.rar | ...\future-0.18.3>python setup.py install ☆3 |
2.2 | pefile-2022.5.30.tar.gz | pypi.org | 同上 | ...\pefile-2022.5.30>python setup.py install |
2.3 | altgraph-0.17.3.tar.gz` 或 altgraph-0.17.3-py2.py3-none-any.whl | pypi.org | 同上 | ...altgraph-0.17.3>python setup.py install 或 ...>pip install altgraph-0.17.3-py2.py3-none-any.whl |
2.4 | pywin32-ctypes-0.2.0.tar.gz | pypi.org | 同上 | ...\pywin32-ctypes-0.2.0>python setup.py install |
3 | pyinstaller-4.8-py3-none-win32.whl | ...>pip install pyinstaller | pyinstaller-4.8-py3-none-win32.whl.rar | ...>pip install pyinstaller-4.8-py3-none-win32.whl |
☆1: python 的下载/安装/卸载
前面解释了,优先使用 32位版。除非有特殊需求要用 64 位,比如:
- 做了个32位应用内存不够用。
- 使用的第三方库只有64位版本。
打开步骤 1.1 中的在线源,进入的页面注意下图的内容,有两个标记 bugfix
的版本不建议用,标记为 security
的才是安全稳定的版本。然后到下面的列表中用 Download
新开(强烈建议)页面。
因为原先每个 release 版本都有安装包可以下载,但是近来(比如 3.3.16
版本) 其页面最下方的 files 列表只有源代码了——开发小组不用自己源代码管理工具,把中间需要测试的版本也放到这里了?
所以你要保留这个页面逐个尝试,才能下载到一个安装包。
如无必要,不需要用最新版本(版本中升级中的bug通常碰不到)。而且安装包还用于卸载,必须在本机保留。所以我在备份下载中提供了 3.8.3
,不过 pip 提供了该文发表时的最新 22.3.1
版。
安装第一步建议选下面的自定义安装。安装 windows 的尿性 C: 盘不安全,一旦系统重装就丢了;而 python 其实只要配好环境参数就能用,系统重装唯一丢失的就是双击 .py 运行的文件关联。
因此通常把 python 安装目录打包复制到其他计算机上也能用,除非某个包需要用到外部的动态库没安装。
环境变量
安装程序默认会自动加环境变量,如果系统重装只了丢了,在 PATH
环境中加下面两个(假定安装目录是D:\App\Python38
)
D:\App\Python38;
D:\App\Python38\Scripts;
注:用 win10 自带的环境变量编辑工具是不用加末尾分号的
还可以加个 PYTHONPATH
的环境变量,把可供其他模块调用的 .py 文件或库(就是一个目录) 放在一个专用的目录下而不是 D:\App\Python38\Scripts\
下,就能被任意地方的 .py 直接 import
引用而无需指定目录。而且还能防止卸载 python 被删或安装其他 python 版本引用不到。
☆2 pip 更新
python 能用后可以查看当前安装的库,初始如下
D:\>pip list
Package Version
---------- -------
pip 19.2.3
setuptools 41.2.0
WARNING: You are using pip version 19.2.3, however version 22.3.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
末尾出来个警告,虽然不睬它也可以安装大多数库,偏偏 pyinstaller 安装不了,还是升级吧。
我是用 ...>python -m pip install --upgrade pip
完成了更新才更具提示下到了 .whl 文件,你可以按步骤表格中的命令升级。
☆3 .tar.gz 或 .whl 的安装
从 pypi.org 下载的安装包有两种:
- 以
.tar.gz
结尾,直接用 winrar 解压,已经有一级根目录了,所以不要解压到新目录,直接解压到当前目录。解压后命令行控制台进入对应的目录,用一模一样的python setup.py install
进行安装 - 以
.whl
结尾的专用包,命令行控制台用pip install altgraph-0.17.3-py2.py3-none-any.whl
的格式直接安装。不是当前目录就加上路径
为了在不同 python 版本中都使用同样的库(你的 .py 源文件应该是向后兼容的,不会因为升级了 python 反而不能用了),为防止像 pyinstaller 一样变得下不到安装包,建议保留每个库的安装包。
即使用 pip 直接在线安装,也可以根据提示信息去下载安装包——大多数库都是 .py 源文件,包很小,重复下载也花不了多少时间。
安装 pyinstaller 注意事项
因为在 pyinstaller.org 上已经没有直接的下载了,这个 4.8
版本从哪里下的不记得了。关键是该版本最高支持到 python 3.10
,已经测试证实 python 3.11
装不了;
同时也忘了最低支持的版本。如果你已经装了不同版本的 python,就从步骤 2.1 开始试试,只要不是太低的版本应该都可以。
毕竟 pypi.org 上的库基本上向后兼容,极少见到不同的 python 小版本号需要用不同的库版本。