转载申明:原创不容易,未经受权,谢绝任何形式的转载

7个Python库提拔开发效率,让你的项目更优良

制止反复造轮子!7个Python库闪开发更轻松  第1张

当有库能够完成你需要的功用,为什么还要本身写代码呢?库是开发者更好的伴侣和救星。在我看来,一个好的项目会操纵一些更好的可用库。

本文是 Python 出色库系列的一部门,此中我总结了 7 个 Python 库,能够帮忙你在开发中获得便当。

1. diagrams制止反复造轮子!7个Python库闪开发更轻松  第2张

当你在开发云系统时,想要在架构设想过程中利用图形来申明你的设想计划,你可能会利用一些设想东西来创建和修改图形。但是利用那些东西需要熟悉它们的利用办法,同时也需要破费时间去领会东西自己的特点和限造。

而 diagrams 库就是一个能够在 Python 代码中创建云系统架构图的东西。你只需要编写简单的 Python 代码,就能够快速创建云系统架构图,而且能够便利地停止版本控造。该库目前撑持多种云办事,包罗 AWS、Azure、GCP、Kubernetes、阿里云、Oracle Cloud 等。

以下是一个简单的示例代码,用于绘造一个根本的云系统架构图,该图包罗一个 Web 办事器、一个数据库办事器和一个文件存储办事器。此中,diagrams 库的核心就是创建图形对象,通过图形对象之间的毗连来暗示差别组件之间的关系。

from diagrams import Diagram, Clusterfrom diagrams.aws.compute import EC2from diagrams.aws.database import RDSfrom diagrams.aws.storage import S3with Diagram("Web System", show=False): with Cluster("Cluster"): EC2("Web Server") >> RDS("Database") EC2("Web Server") >> S3("Files")

该示例代码中,起首创建了一个 Diagram 对象,暗示一个名为 "Web System" 的云系统架构图。然后,利用 Cluster 对象创建了一个名为 "Cluster" 的子图,用于包罗 Web 办事器、数据库办事器和文件存储办事器。接着,创建了三个图形对象,别离代表 EC2、RDS 和 S3。最初,利用箭头符号(>>)暗示 Web 办事器和数据库办事器、Web 办事器和文件存储办事器之间的毗连关系。

运行上面的代码,就能够得到一个类似上面的云系统架构图。

在那个图中,Web 办事器、数据库办事器和文件存储办事器之间的毗连关系十分明晰。并且,若是需要修改图形对象的属性,好比调整办事器的大小、颜色和字体等,也十分容易。同时,那个代码示例中的代码量十分小,易于编写和维护。

更多关于 diagrams 库的详细介绍和利用办法,能够参考其官方文档。

https://github.com/mingrammer/diagrams

2. pyarmor制止反复造轮子!7个Python库闪开发更轻松  第3张

PyArmor是一个用于庇护Python脚本的东西,它供给了多种庇护功用,例如加密源代码、控造代码的运行时间、庇护模块导入等。PyArmor撑持Python2和Python3,而且能够在Windows、Linux和macOS上利用。

利用PyArmor,您能够通过简单的号令行接口对Python脚本停止庇护。下面是一个简单的利用示例。

起首,您需要安拆PyArmor,能够利用pip停止安拆:

pip install pyarmor

接下来,您需要利用PyArmor创建一个项目,能够利用以下号令:

pyarmor init myPRoject

那将创建一个名为“myproject”的目次,此中包罗一些示例文件和一个名为“pyarmor.cfg”的设置装备摆设文件。

接下来,您能够将您要庇护的Python脚本放在“myproject”目次中。例如,假设您有一个名为“my_script.py”的脚本,能够将其放在“myproject”目次中。

如今,您能够利用以下号令对脚本停止加密:

pyarmor obfuscate my_script.py

那将生成一个名为“my_script.pye”的加密脚本,该脚本包罗了加密的源代码。您能够利用以下号令运行加密脚本:

pyarmor run my_script.pye

若是您想控造代码的运行时间,能够利用以下号令:

pyarmor obfuscate --time 3600 my_script.py

那将限造脚本的运行时间为3600秒(1小时)。

除了那些根本功用之外,PyArmor还供给了许多其他的庇护选项,例如庇护模块导入、动态密钥加密等。

总之,PyArmor是一个十分有用的东西,能够帮忙您庇护Python脚本的源代码和常识产权。

https://github.com/dashingsoft/pyarmor

3. tesserocr制止反复造轮子!7个Python库闪开发更轻松  第4张

tesserocr 是一个基于 Tesseract OCR 引擎的 Python 库,用于识别和提取图片中的文本。

Tesseract 是一个开源的 OCR 引擎,能够识别多种语言的文本,而且撑持多种图像格局。Tesserocr 操纵 Tesseract 引擎实现了 Python 接口,便利在 Python 情况下利用 OCR 手艺。

下面是一个利用 tesserocr 库的示例代码:

import tesserocrfrom PIL import Image# 读取图片image = Image.oPEn('test.png')# 对图片停止灰度处置gray_image = image.convert('L')# 对图片停止二值化处置threshold = 80binary_image = gray_image.point(lambda x: 0 if x < threshold else 255)# 停止 OCR 识别text = tesserocr.image_to_text(binary_image)print(text)

以上代码实现了以下步调:

通过 PIL 库读取一张图片;将图片转换成灰度图像;对灰度图像停止二值化处置;利用 tesserocr 库对二值化图像停止 OCR 识别;输出识别出的文本。

需要留意的是,以上代码仅仅是一个简单的示例,现实利用时需要按照详细情况对图片停止恰当的预处置,以进步识别准确率。

https://github.com/sirfz/tesserocr

4. shiv制止反复造轮子!7个Python库闪开发更轻松  第5张

Shiv 是一个 Python 打包和分发东西,它能够将一个 Python 应用法式打包为单个可施行文件,便于摆设和分发。与传统的打包体例差别,Shiv 打包的可施行文件包罗了所有需要的依赖库和资本文件,能够间接运行,无需在目的系统上安拆 Python 或额外的依赖库。Shiv 还撑持虚拟情况,能够包管应用法式在差别的 Python 情况中运行一致。

利用 Shiv 能够极大地简化应用法式的摆设过程,出格是关于没有 Python 情况或没有足够权限安拆依赖库的系统。

以下是利用 Shiv 打包和运行一个简单的 Python 应用法式的示例:

起首,安拆 Shiv:

pip install shiv

接下来,创建一个 Python 应用法式,例如一个简单的 Flask Web 应用法式:

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello(): return 'Hello, world!'if __name__ == '__main__': app.run()

将应用法式保留为 app.py 文件。然后,利用以下号令将应用法式打包成可施行文件:

shiv -c app:app app.py -o app

此中,app:app 指定了应用法式入口点,app.py 是应用法式源代码文件,app 是打包后的可施行文件的名称。

最初,运行打包后的应用法式:

./app

如许就能够在当地运行打包后的应用法式了。要在其他系统上运行,只需将打包后的文件复造到目的系统上即可,无需安拆 Python 或其他依赖库。当然,Shiv 还撑持更多的选项和设置装备摆设,详细能够参考官方文档。

https://github.com/linkedin/shiv

5. maya制止反复造轮子!7个Python库闪开发更轻松  第6张

Maya 是一个用 Python 实现的日期和时间处置库,旨在供给简单、易用的 API,以便开发人员能够轻松地停止各类日期和时间操做,例如日期解析、日期格局化、时区转换、日期加减等。Maya 在利用上比尺度库的 datetime 模块愈加曲不雅、易用,同时撑持更多的时区功用和格局化选项。

Maya 的次要特点包罗:

撑持 ISO-8601 格局以及其他常用格局的日期解析和格局化;撑持大部门的国际时区,并能够轻松停止时区转换;利用 timedelta 停止日期计算,撑持天数、小时、分钟、秒等的加减运算;撑持各类日期和时间的比力和排序;能够很便利地与尺度库的 datetime 模块停止互操做;

下面是利用 Maya 停止日期和时间处置的一些代码示例:

import maya# 解析日期字符串,返回 MayaDT 对象dt = maya.parse('2022-02-15T14:30:00.000Z')# 显示日期和时间print(dt.iso8601())# 显示日期和时间的日期部门print(dt.date)# 显示日期和时间的时间部门print(dt.time)# 显示日期和时间的时区信息print(dt.timezone)# 转换为 UTC 时区utc_dt = dt.astimezone('UTC')# 日期加减操做new_dt = dt.add(days=1, hours=2, minutes=30)# 日期比力print(dt < new_dt)print(dt == new_dt)# 利用 timedelta 停止日期计算delta = new_dt - dtprint(delta)

那些代码展现了若何利用 Maya 解析日期字符串、获取日期和时间的各个部门、停止时区转换、停止日期计算和比力等根本操做。Maya 还撑持更多的功用,例如处置日期范畴、当地化日期和时间、格局化日期和时间等。更多信息能够参考 Maya 的文档。

https://github.com/timofurrer/maya

6. python-decouple制止反复造轮子!7个Python库闪开发更轻松  第7张

解耦是编码中更佳理论之一。那个库将帮忙你实现严酷的设置装备摆设与代码别离。它能够帮忙你组织你的设置,以便你能够在没必要从头摆设应用法式的情况下更改参数。它还包罗许多其他功用,如定义全面的默认值、准确转换值为准确的数据类型、只要一个设置装备摆设模块来办理所有实例等等。那个库在Github上获得了超越2k的星。

凡是,在应用法式中,我们需要设置一些设置装备摆设参数,如数据库的地址、API 密钥、加密密钥等。那些参数凡是不该该硬编码在代码中,而是应该存储在某种设置装备摆设文件中,以便在需要时停止修改。.env 文件就是如许一种文件,它能够存储键值对,如 DATABASE_URL=postgres://user:password@localhost/dbname。

python-decouple 能够很便利地读取 .env 文件中的键值对,并将它们转换为 Python 变量,使得那些设置装备摆设参数能够很便利地在代码中利用。

以下是一个示例代码:

from decouple import config# 读取名为 MY_SECRET_KEY 的变量,若是不存在则返回默认值 'mysecretkey'secret_key = config('MY_SECRET_KEY', default='mysecretkey')# 读取名为 DATABASE_URL 的变量,并将其解析为 URL 对象from urllib.parse import urlparseresult = urlparse(config('DATABASE_URL'))# 读取一个整数类型的变量max_workers = config('MAX_WORKERS', cast=int)

在上面的示例中,config 函数用于读取 .env 文件中的键值对,并将其转换为 Python 变量。cast 参数用于指定要转换的类型,如 int、float、bool 等。

除了从 .env 文件中读取设置装备摆设参数外,python-decouple 还供给了其他一些便利的函数和东西,如从情况变量中读取设置装备摆设、利用多个设置装备摆设文件等。更多详细信息能够参考官方文档。

总之,python-decouple 使得办理和利用设置装备摆设参数变得愈加便利和平安,建议在开发 Python 应用法式时利用它来办理设置装备摆设。

https://github.com/henriquebastos/python-decouple

7. cerberus制止反复造轮子!7个Python库闪开发更轻松  第8张

Cerberus 是一个用于数据验证的 Python 库,可以轻松验证任何格局的数据,并以可读的体例返回错误动静。Cerberus 设想用于验证 JSON-like 数据格局,例如 RESTful API 输入或设置装备摆设文件。 它具有简单的语法和易于利用的 API,而且撑持高级数据类型,例如日期和时间,列表和嵌套数据构造。

以下是一个 Cerberus 的利用示例:

安拆 Cerberus:

pip install cerberus

然后在 Python 中导入 Cerberus:

from cerberus import Validator

接下来,我们定义一个验证器实例,并为其指定验证规则:

schema = { 'name': {'type': 'string', 'required': True}, 'age': {'type': 'integer', 'required': True, 'min': 18, 'max': 99}, 'email': {'type': 'string', 'required': True, 'regex': '[\w\.-]+@[\w\.-]+(\.[\w]+)+$'}, 'is_student': {'type': 'boolean', 'required': True}, 'courses': { 'type': 'list', 'required': True, 'schema': { 'type': 'dict', 'schema': { 'name': {'type': 'string', 'required': True}, 'description': {'type': 'string', 'required': True} } } }}v = Validator(schema)

然后,我们定义一个要验证的数据字典并利用 `validate` 办法停止验证:

data = { 'name': 'John Doe', 'age': 25, 'email': 'johndoe@example.com', 'is_student': True, 'courses': [ {'name': 'Math', 'description': 'Introduction to Calculus'}, {'name': 'Science', 'description': 'Introduction to Physics'} ]}if v.validate(data): print('Data is valid')else: print('Data is invalid') print(v.errors)

以上示例中,我们定义了一个包罗五个字段的验证规则:name、age、email、is_student 和 courses。name 和 age 字段是必填项,age 字段必需在 18 到 99 岁之间,email 字段必需为有效的电子邮件地址,is_student 字段必需为布尔值,courses 字段必需为列表,而且列表中的每个元素都必需为字典类型,字典类型必需具有 name 和 description 字段,且那两个字段都是必填项。

然后我们定义了一个数据字典,并利用 validate 办法对其停止验证。若是数据字典契合验证规则,则打印 Data is valid;不然打印 Data is invalid 并输出错误动静。

完毕

今天的分享就到那里,希望对你有所帮忙。若是你晓得任何其他高效的 Python 东西库,欢送你在评论区弥补。感激你的阅读,若是你喜好我的分享,别忘了点赞转发,让更多的人看到,最初别忘记了存眷「前端达人」,你的撑持将是我分享更大的动力,后续我会持续输出更多内容,敬请等待。