保姆级教程带你开发优质的Python库之中篇【命令行发行】

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 正式的Python专栏第10篇,同学站住,别错过这个从0开始的文章!

前面学委给大家缕一缕了如何开发一个python库并导入运行, 基本完成了一个初步的库


下面指导大家把库做成命令行工具,别人就能像我们使用python或者pip工具一样,输入命令就能使用我们的库!


读者可以查看学委主页加入交流,或者去GitHub给个Star。


把Python库做成命令行的准备

项目结构如下,首先要让它支持命令行。


image.png

记得前面的项目截图里面还有一个setup.py 文件。

setup.py组织了整个项目模块代码和基础信息,支持命令行的诀窍就在里面。

先看一下代码,大家重点观察一个熟悉:entry_points

# -*- coding: utf-8 -*-
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: OpenSource
# @File : setup.py
# @Project : pypi_seed
from distutils.core import setup
from setuptools import find_packages
setup(name='pypi_seed',  # 包名
      version='1.0.3',  # 版本号
      keywords=("pypi_seed", "seed", "generator", "levin", "leixuewei"),
      description='A small tool to demo on upload package to pypi and utility scripts to generate a pypi seed',
      long_description="""A small tool to demo on upload package to pypi and utility scripts to generate a pypi seed!
Powered by py4ever team!""",
      author='levin',
      author_email='790839397@qq.com', #项目联系人
      url='https://github.com/py4ever/pypi_seed',
      #学委删简了一些,非本文重点的信息
      entry_points={
          'console_scripts': [
              'pypiseed = pypi_seed.main:main',
              'pyseed = pypi_seed.main:main'
          ]
      },
      classifiers=[
          'Intended Audience :: Developers' # 学委删简了一些支持多版本的,需要的去github或者gitee借鉴pypi_seed的setup.py
      ],
      )

解释一下setup.py

简单理解,这个setup.py 就相当于一个开源模块的地图。


它包括了作者信息,项目说明,版本,项目链接,更重要的,安装后命令行的程序入口就放在“entry_points"。


设置了entry_points, 我们使用pip工具安装这个模块的时候,它会自动帮我们创建相应的文件。


比如上面的entry_points是两个命令工具:


pypiseed 为命令行工具,对等与调用pypi_seed.main:main

pyseed 为命令行工具,对等与调用pypi_seed.main:main

补充说明setup.py其他参数解释

重点是作者,项目名称,联系信息,下面整理解释:


name : 项目名称,特别重要!其他开发者通过这个来搜索你的库

author : 作者

keywords : 项目关键字

description : 项目说明

author_email : 作者邮箱信息

url : 项目主页

这些比较直白,根据开源工具的定位来编写完善。


项目说明如果写不下,就放置在long description字段。万一用户在用的时候有啥反馈,还能够联系到邮箱,或者通过项目主页继续互动,这样能够保持项目的不断完善,与时俱进!


第二步 开发一个命令行处理的Python程序

生成了程序入口了,我们可以通过


pyseed  参数 #调用pypi_seed了

好了,说完entry_points, 它调用到了pypi_seed.main:main。 学委已经帮大家看了源码了。


pypiseed / pyseed里面调用了一个程序内的show_help 和args2dict 两个方法。


开源项目源码解析

这里是show_help方法,重点是输出打印一些使用信息,和项目简易说明。


def show_help():
    print('usage:')
    print('-h, --help: print help message.')
    print('-p, --project: your desired project name')
    print('-P, --path: where to save the sample project after code-generation')
    print('-a, --author: the author information')
    print("===========================================")
    show_sample_run()
    show_about()

这里就是本文的核心了,解析用户的输入。

为了解析方便,学委仅摘取了核心代码段,我们看一下。

import sys
import getopt
def args2dict():
    argv = sys.argv[1:]
    if '-h' in argv or '--help' in argv:
        show_help()
        exit(0)
    try:
        opts, args = getopt.getopt(argv, "p:P:a",
                                   ["path=",
                                    "author=",
                                    "project="])
    except Exception as e:
        raise ValueError("Looks like missing value, please check usage by '-h'. Current error : %s " % str(e))
    project = author = path = None
    for opt, arg in opts:
        if opt in ['-p', '--project']:
            project = arg
        elif opt in ['-a', '--author']:
            author = arg
        elif opt in ['-P', '--path']:
            path = arg
    if project is None:
        print("please input project with '-p' or '--project', e.g. -p my_project ")
        raise ValueError("Missing project")
    if author is None:
        print("please input author with '-a' or '--author', e.g. -a whoami ")
        raise ValueError("Missing author")
    if path is None:
        path = os.getcwd()
        print("path is not given, so will use default as current directory : %s" % path)
    return dict(project=project, author=author, path=path)

核心代码讲解

这里主要是分三步


获取终端参数,判断是否输出帮助

使用getopt内置库来解析p:P:a参数(-a, -P, -p) 处理为一个字典dict(管理project/author/path等信息)

返回字典给生成器调用,生成种子项目。

最后使用命令行调用你的库:

安装你的库:


pip install pypi_seed

使用命令如下:

pyseed -p demo_proj -a testuser -P '.'

效果如下,这么简单就生成了,项目了,稍微开发就能成为一个自己的模块,并分享。

image.png

总结

别人找到你的库就很不容易了,命令行的使用也必须力求简洁易懂 ,务必把帮助提示也做的友好一些,方便快速使用嘛!


学会使用setup.py 高效的组织项目代码和配置。

开发命令行工具重点是处理用户输入的参数。

一个优秀的开源项目需要提供简便的使用帮助。

完善的开源项目代码在这:Pypi-Seed on Github


目录
相关文章
|
16天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
12天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
49 4
|
12天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
25 2
|
11天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
7天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
7天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
7天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
9天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
8天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。
|
9天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。