2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 使用 pyinstaller 打包成 exe/app 文件,并支持传入外部参

时间:12-21来源:作者:点击数:46
  • 要解决打包后的win exe 或 mac 可执行文件支持接收外部传参的功能。这里就用到了sys包或者argparse包,两者都能达到接收外部参数的目的。下面介绍两种方式传参。
  • 可以通过拿到当前脚本的路径,然后拼上外部配置文件组成路径进行读取,省去了传入步骤。
    • import sys
    • import os
    • # 路径操作对象
    • print(os.path)
    • # 返回当前脚本的路径
    • print(sys.executable)
    • # 返回当前脚本的绝对路径
    • print(os.path.realpath(sys.executable))
    • # 去掉文件名,返回当前脚本的目录(也可以理解从里到外,去掉一层)
    • print(os.path.dirname(os.path.realpath(sys.executable)))
    • # 也可以嵌套多去掉几层,直到想要的文件夹即可
    • print(os.path.dirname(os.path.dirname(os.path.realpath(sys.executable))))
    • # 举例
    • # path = os.path.dirname(os.path.dirname(os.path.realpath(sys.executable)))
    • # filePath = path + '/' + 'config.json'
    • # 注意 mac、win 路径中的斜杠问题,可以使用转义符 '\\' '\/'
  • 下面两种传参方式,打包后调用:
    • # mac 可执行文件也一样传,win 暂时没测试过,后续补上
    • $ main 1 2 3
    • # 但是打包的 mac 软件 不可以这么传,要么 gui 导入,要么内部写死一个路径读取(例如:网页)
  • sys方式:
    • import sys
    • import json
    • # 解析参数
    • in_filepath = sys.argv[1] # 参数 1
    • # out_style = sys.argv[2] # 参数 2
    • # out_filepath = sys.argv[3] # 参数 3
    • print("--input_filepath:",in_filepath)
    • # print("--output_file_style",out_style)
    • # print("--output_filepath",out_filepath)
    • # 解析 json 文件
    • # obj = json.load(open('./test.json', 'r', encoding="utf-8"))
    • # 解析动态路径
    • obj = json.load(open(in_filepath, 'r', encoding="utf-8"))
    • # 输出使用
    • print(obj, obj[0])

    调用方式:

    • # 传入方式
    • $ python test.py ./test.json
    • # 多个则 空格 分隔开
    • $ python test.py 1 2 3
  • argparse方式:
    • # 导入库
    • import argparse
    • # 1. 定义命令行解析器对象
    • parser = argparse.ArgumentParser(description='Demo 参数介绍')
    • # 2. 添加命令行参数(--xxx 为固定写法)
    • parser.add_argument('--name', type=str, help='名称必须传字符串')
    • parser.add_argument('--age', type=int, default=20, help='年龄必须传 int,默认 20 岁')
    • # 3. 从命令行中结构化解析参数
    • args = parser.parse_args()
    • print('输出参数集合:', args)
    • epochs = args.name
    • batch = args.age
    • print('单个输出 {} {}'.format(epochs, batch))

    调用方式:

    • # 传入方式,必须带上 key,得 key value 的形式传入
    • $ python test.py --name dzm
    • # 多个则一直 key value 的方式往后拼接
    • $ python test.py --name dzm --age 30
    • # 怎么知道传参有哪些
    • $ python test.py -h
    • # 会输出描述
    • usage: dzm.py [-h] [--name NAME] [--age AGE]
    • Demo 参数介绍
    • options:
    • -h, --help show this help message and exit
    • --name NAME 名称必须传字符串
    • --age AGE 年龄必须传 int,默认 20
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门