Python DAY 3 作业评审&发布 PYPI| 学习笔记

简介: 快速学习 Python DAY 3 作业评审&发布 PYPI。

开发者学堂课程【面向运维的 python 脚本速成 -1024程序员节创造营公益课Python DAY 3 作业评审&发布 PYPI】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/895/detail/14307


Python DAY 3 作业评审&发布 PYPI

 

目录:

一、 Python 脚本的问题

二、 常用的 Python 命令行编写工具

三、 Click

四、 Click 快速开始

五、 Click 定义可选选项 Option

六、 Click 定义参数 Argument

七、 Click 输出彩色字体

八、 Click 分页

九、 Click 显示进度条

十、 为什么要将命令行工具发布至 Pypi

十一、 作业评审

 

一、Python 脚本的问题

1.用户需要手动安装依赖

如果脚本写的非常复杂,安装将会非常麻烦,分发非常不妨便

2.涉及到多个脚本,需要手动分发多个脚本,维护非常麻烦

自己写的脚本不能实现子命令

3.脚本对于环境的一致性要求比较高,分发时需要确保环境一致

4.脚本不放置在系统路径中,需要使用完整路径调用

5.脚本无法配置子命令,使用起来比较麻烦

6.脚本需要自行维护参数 args

7.脚本没有提供原生的帮助信息,长期维护成本高


二、常用的 Python 命令行编写工具

1.cement

2.Click

Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现。

案例:

# hello.py

import click

@click.command()

@click.option('--count', default=1, help='Number of greetings.')

@click.option('--name', prompt='Your name',help='The person to greet.')

def hello(count, name):

"""Simple program that greets NAME for a total of COUNT times."""

for x in range(count):

click.echo('Hello %s!' % name)

if __name__ == '__main__':

hello()

3.cliff

4.docopt

5.python-fire

6.python-prompt-toolkit


三、Click

click 是一个以尽可能少的代码、以组合的方式创建优美的命令行程序的 Python 包。它有很高的可配置性,同时也能开箱即用。

Click 具备以下三个特性

•任意嵌套命令

•自动生成帮助

•支持运行时坚持加载子命令

帮助我们在写代码时可以非常方便的命令,而且提供了很多的装饰器

 

四、Click 快速开始

首先我们需要安装 click

import click-

#通过 click 注册一个新的 click

@click. command()-

def hello():-

click. echo( 'Hello WorLd!') -

if __name__ = ‘__main__’

hello()

(venv )-click python hello.py

Hello World!

实验1:

首先创建一个文件:

Mkdir click.py

Touch click.py

输入内容:

import click-

#通过 click 注册一个新的 click

@click. command()-

def hello():-

click. echo( 'Hello WorLd!') -

if __name__ = ‘__main__’

hello()

然后保存输入 python hello.py 运行脚本

得到结果:Hello World!

用 click 实现昨天的脚本前函数部分:

import click

@click. command()

def help():

click. echoC"hello world")

@click. commandO)

def info():

click. echo("info")

@click. command()

def ip():

click. echo("info")

@click. command()

def name() :

click. echoC"info")

@click. commandO)

def run():

click. echo("info")

if_ name__==’___main___’

 

五、Click 定义可选选项 Option

•在 Click 中,可以使用 click.option 来定义选项

option 中设置 default 为默认选项

option 中设置 help 为 帮助信息

option 设置 type 为数据类型

option 设置 hide_input 可以隐藏输入

option 设置 confirmation_prompt 可以验证输入

option 设置 nargs 表示接受多个值

案例:

@cLick . command()

@cLick .option(--name', prompte='Your name’.Help=’the person to greet.’

def hello(count, name):

# comand code

这是一个可选项的输入

最常用的:@click.options(“--forcce”)

 

六、Click 定义参数 Argument

•在 Click 中,可以使用 click.argument 来定义参数

argument 设置 nargs 表示接受多个值

argument 设置 type 设定格式

argument 设置 type 为 click.File 支持对文件操作

@click . command( )

@cLick . argument( ' input', type=click.File('rb'))

@click . argument( ' output',type=click.File('wb' ))

def inout( input, output) :

while True:

chunk = input .read(1024 )

if not chunk:

break

output . write ( chunk)

 

七、Click 输出彩色字体

调整输出结果:

Click 内置了输出颜色的功能,开发者可以很轻松的完成对文字进行美化,从而提升输出内容的醒目程度

cLick . echo(click.styLe( 'Hello World!', fg=' green'))

click. echo(click.styLe('Some more text', bg='btue', fg=' white'))

click. echo(click.styLeC'ATTENTION', bLink=True, bold=True))

| click. secho('HeLlo World!', fg=' green' )

click. secho('Some more text', bg='blue', fg= 'white')

click. secho( ' ATTENTION ', bLink=True, bold=True )

 

八、Click 分页

Click 内置了分页内容的支持,你可以十分方便的完成内容的分页展示;对于内容特别大的,可以使用迭代器来实现

@click. comand()

def Less():

click.echo_via_pager(“\n”.join(f”Line {idx}" for idx in range

(200)))

def generate output():

for idx in range (50000):

yield f"Line {idx}\n"

aclick。command()

def Less() :

click.echo _via_ pager(_ generate . output() )

 

九、Click 显示进度条

Click 提供了一个进度条的功能,在处理大量文件时,可以快速实现一个简单的进度条

Import time

import click

all_the_ users._to_ process . ['a', 'b','c']-

def modify_ the_ user(user):-

time.sLeep(0.5)-

with click. progressbar (all_the._users_to_process) as bar:-

for user in bar :

nodify_the_user(user)

import t ime

import click

all_the_ users. to. procuss . ['a', b','e']-

def modify_ the. user(user);-

time. sleep(0.5)-

with cLick ,progressbar(a1l_ the. users. to. process) as bar:-

for user in enumerate(all_the users_ to. process):-

nodify_the_user(user)-

bar.update (1)

 

十、为什么要将命令行工具发布至 Pypi

•更容易被分发:使用时通过 Pypi 安装即可

•无需关注执行环境:如果可以通过 Pip 安装,则说明相应环境已经齐备,无需在代码中检测

如何发布 pypi:

setup.py setup.cfg 中定义包的基本信息

最核心的是setup函数

setup(

#包名

name= ' bestony-test-package‘,

#版本号

version="1.0.0"

#作者名

author="bestony" ,

#邮箱

author_ email= ' bestony@Linux. com '

#基本介绍

description= "bestony test '

#长介绍支持 text 文件和 markdown 文件

markdown 文件文件内容:

# test

## command

1. python3 setup.py sdist

2. pip install twine -U

3. twine upLoad -- repository testpypi dist/*

4. twine upload pypi dist/*

Long_ description=long_ description,

Long_ description_ .content. .type= 'text/ markdown '

#分类器

classifiers= [

' DeveLopment Status :: 4一Beta' ,

Programming Language :: Python :: 3'

#省略一下

],

#确认发哪个文件

packages=find_ .packages(),

#包需要什么版本的 python

python_ requires='≥3.5'

#需要依赖哪些软件包

install_ requires= [],

#地址信息

project_ urls={

'Source': ' https :// github. com/bestony/xxx

},

# entry. _points={

#"console_ scripts": [

#"bestony=source : main”

#]

# },

)

打包文件:

python3 setup.py sdist

安装twine 包:

pip install twine -U

上传:需要先在 pypi.com 注册一个账号

twine upLoad -- repository testpypi dist/*

发布时需要用户名和密码,注意要在登录状态

 

十一、作业评审

注意:

l 如果在脚本文件中引入了全新的包,要提醒使用人进行安装

可以在文件开头这样标明

# -*- coding: utf-8 -*-

@Time :2021/11/3 8:52

@Auth :班纳.

@File:Learning- .day02. py

@IDEPyCharm

@Motto: guting(Always Be Coding)

l 在 python 文件中,格式问题非常重要,一个空格或缩进将决定代码是否能被运行

l 注意自己写的代码是什么意思,是否有基础错误,可以适当多写点注释,这样可以让自己可以一眼看出什意思,别人也能轻易读懂你写的代码

l 可以把包放在一行进行引入

import os,sys,time, socket,platform

l Python 多行语法

def info():

info_ msg = f”””

PLatform: {platform. pLatform()}

Version: {pLatform . versionC}

System: {platform. system()}

“””

print(info_ msg)

l Python多层嵌套,是否确认环节

def exec_ .shell(cmd ,pars):

#本函数可能引入注入攻击

if(cmd =="pip install"):

os.systemC"pip install “+ pars)

else:

print( "The command is not our standard command: ”, cmd,

x=input("Do you know what your are doning?(y/n)")

if( x == "y"):

x=input("You Really Want to Excute the Command?(y/ n)")

if( x == "y"):

os. system(cmd +””+ pars)

else:

print("You did NOT excuted the command" )

exit( 1 )

else:

print("You did NOT excuted the command")

exit(1)

l Python  eval 函数使用

#获取服务器信息

#func_ .name 方法名

def exe_ .platform(func_ _name):

if(func_ name =="):

print("exe_ platform方法缺失第二个参数(platform的方法名称)")

exit( )

print("result:”,eval(' platform. '+func_ name+'() ')

可以做一个预设如果没有输入内容将会输出什么,因为你不知道别人是如何使用你的脚本的

l 脚本开始时一个标明命令内容,多写帮助命令,方便用户使用

相关文章
|
1月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
183 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
130 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
135 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
61 1
|
1月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
79 1
|
1月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
51 2
|
1月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
32 1
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
41 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
Java 编译器 Go
Python学习笔记--- day01计算机基础和环境搭建(一)
Python学习笔记--- day01计算机基础和环境搭建(一)
|
1月前
|
程序员 编译器 Python
Python学习笔记--- day01计算机基础和环境搭建(二)
Python学习笔记--- day01计算机基础和环境搭建(二)