📜  命令行脚本 |Python包装

📅  最后修改于: 2022-05-13 01:55:46.621000             🧑  作者: Mango

命令行脚本 |Python包装

我们如何在Python中执行任何脚本?

$ python do_something.py
$ python do_something_with_args.py gfg vibhu

可能这就是你的做法。
如果您的答案是您只需单击 IDE 上的一个按钮即可执行Python代码,那么假设您被特别询问了您是如何在命令行上执行此操作的。

让我们让您更轻松。

$ do_something
$ do_something_with_args gfg vibhu

那肯定看起来干净多了。基本上,它们只是您转换为命令行工具的Python脚本。在本文中,我们将讨论如何自己做到这一点。

该过程可以分为以下6个步骤:

  1. 创建您的命令行脚本。
  2. 打包的设置文件和文件夹结构。
  3. 修改setup.py文件以合并 CLI 脚本。
  4. 在发布之前测试你的包,然后构建。
  5. 在 pypi 上上传并发布你的包。
  6. 安装新发布的包。

前两个步骤在其各自的文章中进行了全面介绍。建议在继续之前查看它们。本文将主要从第 3 步继续。

步骤#1:制作你的命令行脚本
-> gfg.py

import argparse
  
def main():
  
    parser = argparse.ArgumentParser(prog ='gfg',
                                     description ='GfG article demo package.')
  
    parser.add_argument('integers', metavar ='N', type = int, nargs ='+',
                        help ='an integer for the accumulator')
    parser.add_argument('-greet', action ='store_const', const = True,
                        default = False, dest ='greet',
                        help ="Greet Message from Geeks For Geeks.")
    parser.add_argument('--sum', dest ='accumulate', action ='store_const',
                        const = sum, default = max,
                        help ='sum the integers (default: find the max)')
  
    args = parser.parse_args()
  
    if args.greet:
        print("Welcome to GeeksforGeeks !")
        if args.accumulate == max:
            print("The Computation Done is Maximum")
        else:
            print("The Computation Done is Summation")
        print("And Here's your result:", end =" ")   
  
    print(args.accumulate(args.integers))


步骤#2:设置文件和文件夹结构
步骤#3:修改 setup.py 文件

Setuptools 允许模块注册入口点( entry_points ),其他包可以连接到这些入口点以提供某些功能。它本身也提供了一些,包括console_scripts入口点。
这允许Python函数(不是脚本!)直接注册为命令行可访问工具!
->设置.py

from setuptools import setup, find_packages
  
with open('requirements.txt') as f:
    requirements = f.readlines()
  
long_description = 'Sample Package made for a demo \
      of its making for the GeeksforGeeks Article.'
  
setup(
        name ='vibhu4gfg',
        version ='1.0.0',
        author ='Vibhu Agarwal',
        author_email ='vibhu4agarwal@gmail.com',
        url ='https://github.com/Vibhu-Agarwal/vibhu4gfg',
        description ='Demo Package for GfG Article.',
        long_description = long_description,
        long_description_content_type ="text/markdown",
        license ='MIT',
        packages = find_packages(),
        entry_points ={
            'console_scripts': [
                'gfg = vibhu4gfg.gfg:main'
            ]
        },
        classifiers =(
            "Programming Language :: Python :: 3",
            "License :: OSI Approved :: MIT License",
            "Operating System :: OS Independent",
        ),
        keywords ='geeksforgeeks gfg article python package vibhu4agarwal',
        install_requires = requirements,
        zip_safe = False
)


第 4 步:测试和构建
测试:将目录更改为包的顶级目录,与setup.py文件相同。
通过键入此命令来安装您想要的包。

$ python3 setup.py install

如果设置中没有错误,这将安装您的软件包。
现在您可以测试包的所有功能。如果出现任何问题,您仍然可以解决问题。

构建:确保您已升级 pip 版本以及最新setuptoolswheel 。现在使用这个命令来构建你的包的发行版。

$ python3 setup.py sdist bdist_wheel


步骤#5:发布包
twine是一个库,可帮助您将包分发上传到 pypi。在执行以下命令之前,请确保您在 PyPI 上有一个帐户

$ twine upload dist/*

提供凭证并完成!你刚刚在 PyPI 上发布了你的第一个Python包。步骤#6:安装包
现在使用pip安装新发布的包。

$ pip install vibhu4gfg

玩。

$ gfg
usage: gfg [-h] [-greet] [--sum] N [N ...]
gfg: error: the following arguments are required: N

$ gfg -h
usage: gfg [-h] [-greet] [--sum] N [N ...]

GfG article demo package.

positional arguments:
  N           an integer for the accumulator

optional arguments:
  -h, --help  show this help message and exit
  -greet      Greet Message from Geeks For Geeks.
  --sum       sum the integers (default: find the max)

$ gfg 5 10 15 -greet
Welcome to GeeksforGeeks!
The Computation Done is Maximum
And Here's your result: 15

$ gfg 5 10 15 -greet --sum
Welcome to GeeksforGeeks!
The Computation Done is Summation
And Here's your result: 30

参考:https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html