Python代码的打包神器--pyinstaller,将python代码打包成exe
Python代码的打包神器--pyinstaller,将python代码打包成exe
文章目录
pyinstaller介绍
pyinstaller是一个python的第三方库,它能够在Windows、Linux、
if getattr(sys, ‘frozen’, False):
# pyinstaller打开
BASE_DIR = os.path.dirname(sys.executable)
else:
# py文件路径
BASE_DIR = os.path.dirname(os.path.abspath(file))
print(“----环境使用xxx系统----”)
with open(os.path.join(BASE_DIR, “account.txt”), mode=‘r’, encoding=‘utf-8’) as f:
data = f.read().strip()
print(data)
time.sleep(5)
1.3 关于模块
动态加载不同目录
但是,如果遇到那种动态导入模块的代码时,他是无法找到关联的包。
import time
import importlib
print(“----环境使用xxx系统----”)
# from utils import card
# card.get_number()
card = importlib.import_module(“utils.card”)
v1 = card.get_number()
print(v1)
time.sleep(5)
此时我们打包时,就不再加-F 或 -D 而是直接执行.spec文件
案例,定义一目录,下不同py文件下有同样函数名称
import importlib
name = input('请输入模块名称:')
path_string = f'utils.{name}'
#动态导入
md = importlib.import_module(path_string)
res = md.func(11,22)
print(res)
此时如果再按之前方式打包,程序运行时就会找不到模块
解决这样的问题,就要借助.spec里面有个隐式导入的配置
我们把要导入的模块路径放在这个列表里面,再次打包时,我们不能再通过py文件来运行了,否则会重新生成这个.spec文件。而是基于这个.spec文件进行打包
我们把其他打包时生成的文件删掉,重新打包
pyinstaller pyinstalltext.spec
- 1
此时再执行就不报错了
打包成单文件的可执行文件,把其他依赖的utils目录下的文件删了,也可以正常执行
也可指定生成程序的名称
生成的可执行程序和.spec文件都是我们指定的名称
1.4 程序图标
在打包时,加入 -i 参数可以展示图标(内部需要依赖pillow模块将图片转换为icon)
pip install pillow
打带图标的包
pyinstaller -F pyinstalltext.py -i lingge.jpg
1.5 PyInstaller 支持的常用选项
-h,–help 查看该模块的帮助信息
-F,-onefile 产生单个的可执行文件
-D,–onedir 产生一个目录(包含多个文件)作为可执行程序
-a,–ascii 不包含 Unicode 字符集支持
-d,–debug 产生 debug 版本的可执行文件
-w,–windowed,–noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed,–console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,–name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
更多推荐
所有评论(0)