参数 | 简介 |
---|---|
-h | 查看该模块的帮助信息 |
-F | 产生单个的可执行文件 |
-D | 产生一个目录(包含多个文件)作为可执行程序 |
-a | 不包含 Unicode 字符集支持 |
-d | 产生 debug 版本的可执行文件 |
-w | 指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
-c | 指定使用命令行窗口运行程序(仅对 Windows 有效) |
-o | 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
-p | 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
-n NAME,--name=NAME | 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
假设 main.py 脚本调用 bank.txt视频文件(main.py和bank.txt在同一级目录),那么将在main.py脚本需要这样写:
import os
import sys
def resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
os.startfile(resource_path('bank.txt'))
input()
将多个资源文件最后都打包成一个文件,会临时进行解压,解压的目录为:C:\Users\用户名\AppData\Local\Temp\
随机目录名, 而我们找到这个目录就需要 sys._MEIPASS
这个属性数值,而如果没有这个属性的普通运行情况 会返回 os.path.dirname(os.path.abspath(__file__))
也就是普通寻找文件的情况。
PY文件打包命令:
pyinstaller -F --add-data bank.txt;. main.py
注意: –add-data
: 第一个参数 是要添加文件或路径 bank.txt;.
= bank.txt
+ ;
+ .
,然后是一个分割符 在windows上是 ;
linux上是 :
最后参数是 .
也就是打包后存在的路径,解压后的路径。在.spec里面结构如下:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['C:\\Users\\Administrator\\Desktop\\py\\py2exe'],
binaries=[],
datas=[('banks.txt', '.')], #注意这里,文件名,目录,. 表示当前目录
hiddenimports=[],
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='banknum',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
你也可以通过 pyi-makespec 来生成 spec文件,然后进行修改。
Spec文件打包命令:
pyinstaller -F main.spec # 这里不是main.py 是 main.spec