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

  • 主篇 Python PyInstaller 打包成 Win、Mac 应用程序(app / exe),附:Python virturalenv + pyinstaller 最小化打包 python 程序

  • 要解决打包后的 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
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用pyinstaller可以将Python脚本打包可执行文件,包括Windows、Linux和Mac OS X等平台。 下面是使用pyinstallerPython脚本打包app的步骤: 1. 安装pyinstaller 使用pip安装pyinstaller: ``` pip install pyinstaller ``` 2. 打包Python脚本 打开命令行窗口,进入Python脚本所在的目录,执行以下命令: ``` pyinstaller -w -F your_script.py ``` 数解释: - `-w`:表示不显示命令行窗口,只显示图形界面。 - `-F`:表示将所有依赖项打包一个单独的可执行文件,方便部署。 打包后,会在同级目录下生`dist`目录,里面包含了生的可执行文件。 3. 将可执行文件打包app 对于Mac OS X平台,需要将可执行文件打包app。 打开终端,进入`dist`目录,执行以下命令: ``` mkdir your_app.app/Contents/MacOS mv your_script your_app.app/Contents/MacOS/your_app ``` 将`your_script`替换可执行文件的名称,将`your_app`替换你的app名称。 然后进入`your_app.app/Contents/`目录,创建`Info.plist`文件文件内容如下: ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleExecutable</key> <string>your_app</string> <key>CFBundleName</key> <string>your_app</string> <key>CFBundleIconFile</key> <string>icon.icns</string> <key>CFBundleIdentifier</key> <string>com.your_company.your_app</string> </dict> </plist> ``` 其中`CFBundleExecutable`、`CFBundleName`、`CFBundleIconFile`、`CFBundleIdentifier`分别表示可执行文件app名称、app图标和app唯一标识符。 最后将图标文件`icon.icns`放在`your_app.app/Contents/Resources/`目录下,就可以双击运行app了。 注:对于Windows和Linux平台,不需要打包app,直接使用的可执行文件即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值