在 PyInstaller 中添加依赖文件,你可以按照以下步骤操作:
- 安装 PyInstaller 库:在命令行中输入以下命令来安装 PyInstaller¹:
pip install pyinstaller
- PyInstaller 的打包机制:Python 脚本的运行离不开 Python 解释器,把脚本打包成 exe 可执行文件时,PyInstaller 会将 Python 解释器和脚本一起打包,同时把需要用到的第三方库和依赖包一并打入到 exe 文件中¹。
- 打包命令:使用以下命令将以
main.py
为主程序的脚本打包为单独一个 exe 文件¹:
pyinstaller -F main.py
-F
参数表示覆盖打包,无论打多少次包都会是最新的¹。
- 添加导包外的一些依赖文件:如果程序逻辑中需要依赖一些文件,但 PyInstaller 并不会自动把这些文件帮你打包进去,那该怎么办呢?别急,PyInstaller 为我们提供了参数配置文件,也就是刚刚生成的
.spec
文件,我们只需要在datas
中配置需要打包的文件即可¹。例如,你可以在.spec
文件中添加如下代码²:
a = Analysis(['test_2.py', 'C:\\Users\\ASUS\\Desktop\\Conbination\\test\\class_for_test_2_1.py', 'C:\\Users\\ASUS\\Desktop\\Conbination\\test\\class_for_test_2_2.py'],
pathex=['C:\\Users\\ASUS\\Desktop\\Conbination\\test','C:\\Users\\ASUS\\Desktop\\Conbination'],
datas=[('C:\\Users\\ASUS\\Desktop\\Conbination\\need_out.dll','.'), ('C:\\Users\\ASUS\\Desktop\\Conbination\\test\\need1.dll','.')],
...
)
这样修改后我们就可以使用命令进行再次打包²:
pyinstaller -F test_2.spec
.spec
方式打包:这样修改后我们就可以使用命令进行再次打包¹:
pyinstaller -D xxx.spec
打包完成后打开软件,发现需要用到依赖文件已经成功打包,相关功能就正常啦¹。这些都是 PyInstaller 的 spec 文件中的参数,用于配置打包过程。以下是每个参数的解释:
pathex=[]
:这是一个列表,用于添加到 sys.path 的路径。这些路径将被用于查找模块和数据文件。binaries=[]
:这是一个列表,用于指定要添加到可执行文件的二进制文件。列表中的每个元素都应该是一个元组,形式为(source, destination)
,其中source
是要收集的文件的路径,destination
是相对于顶级应用程序目录的目标目录。datas=[]
:这是一个列表,用于指定要添加到应用程序的数据文件。格式与binaries
参数相同。hiddenimports=[]
:这是一个列表,用于指定脚本代码中不可见的导入。这些导入将被添加到可执行文件中。hookspath=[]
:这是一个列表,用于指定包含额外的钩子文件的目录。钩子文件用于自定义打包过程。hooksconfig={}
:这是一个字典,用于指定钩子配置。钩子配置用于自定义打包过程。runtime_hooks=[]
:这是一个列表,用于指定运行时钩子。运行时钩子是在打包的应用程序启动时运行的脚本。excludes=[]
:这是一个列表,用于指定要从打包过程中排除的模块。noarchive=False
:这是一个布尔值,用于指定是否禁用归档。如果设置为 True,那么所有 Python 模块都将被存储为预编译的 pyc 文件,而不是存储在一个归档文件中。
除了直接使用 pyinstaller
命令生成 spec 文件外,还有其他的方式可以生成 spec 文件:
- 使用
pyi-makespec
命令:pyi-makespec
是pyinstaller
的一个子命令,可以用来生成 spec 文件¹³⁴。例如,你可以在命令行中输入以下命令¹³⁴:
pyi-makespec options name.py [other scripts ...]
这个命令会创建 name.spec
文件,但不会继续生成可执行文件¹³⁴。其中,options
与 pyinstaller
命令中的 options
选项相同¹³⁴。
- 修改 spec 文件:创建 spec 文件并对其进行必要修改后,将 spec 文件传给
pyinstaller
命令即可构建应用程序¹²³⁴:
pyinstaller options name.spec
创建 spec 文件时,大多数命令选项都会被编入其中。通过 spec 文件进行构建时,这些选项将无法更改。如果在命令行中再次添加这些选项,则会被忽略,并由 spec 文件中的选项替代¹²³⁴。