避免重复造轮子!7个Python库让开发更轻松

转载说明:原创不易,未经授权,谢绝任何形式的转载

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

当有库可以完成你需要的功能,为什么还要自己写代码呢?库是开发者最好的朋友和救星。在我看来,一个好的项目会利用一些最好的可用库。

本文是 Python 精彩库系列的一部分,其中我总结了 7 个 Python 库,可以帮助你在开发中获得便利。

1. diagrams

当你在开发云系统时,想要在架构设计过程中使用图形来说明你的设计方案,你可能会使用一些设计工具来创建和修改图形。但是使用这些工具需要熟悉它们的使用方法,同时也需要花费时间去了解工具本身的特点和限制。

而 diagrams 库就是一个可以在 Python 代码中创建云系统架构图的工具。你只需要编写简单的 Python 代码,就可以快速创建云系统架构图,并且可以方便地进行版本控制。该库目前支持多种云服务,包括 AWS、Azure、GCP、Kubernetes、阿里云、Oracle Cloud 等。

以下是一个简单的示例代码,用于绘制一个基本的云系统架构图,该图包括一个 Web 服务器、一个数据库服务器和一个文件存储服务器。其中,diagrams 库的核心就是创建图形对象,通过图形对象之间的连接来表示不同组件之间的关系。

from diagrams import Diagram, Cluster
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.storage import S3

with 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

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

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

Tesseract 是一个开源的 OCR 引擎,可以识别多种语言的文本,并且支持多种图像格式。Tesserocr 利用 Tesseract 引擎实现了 Python 接口,方便在 Python 环境下使用 OCR 技术。

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

import tesserocr
from PIL import Image

# 读取图片
image = Image.open('test.png')

# 对图片进行灰度处理
gray_image = image.convert('L')

# 对图片进行二值化处理
threshold = 80
binary_image = gray_image.point(lambda x: 0 if x < threshold else 255)

# 进行 OCR 识别
text = tesserocr.image_to_text(binary_image)

print(text)

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

  1. 通过 PIL 库读取一张图片;
  2. 将图片转换成灰度图像;
  3. 对灰度图像进行二值化处理;
  4. 使用 tesserocr 库对二值化图像进行 OCR 识别;
  5. 输出识别出的文本。

需要注意的是,以上代码仅仅是一个简单的示例,实际使用时需要根据具体情况对图片进行适当的预处理,以提高识别准确率。

https://github.com/sirfz/tesserocr

4. shiv

Shiv 是一个 Python 打包和分发工具,它可以将一个 Python 应用程序打包为单个可执行文件,便于部署和分发。与传统的打包方式不同,Shiv 打包的可执行文件包含了所有需要的依赖库和资源文件,可以直接运行,无需在目标系统上安装 Python 或额外的依赖库。Shiv 还支持虚拟环境,可以保证应用程序在不同的 Python 环境中运行一致。

使用 Shiv 可以极大地简化应用程序的部署过程,特别是对于没有 Python 环境或没有足够权限安装依赖库的系统。

以下是使用 Shiv 打包和运行一个简单的 Python 应用程序的示例:

首先,安装 Shiv:

pip install shiv

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

from flask import Flask

app = 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

Maya 是一个用 Python 实现的日期和时间处理库,旨在提供简单、易用的 API,以便开发人员可以轻松地进行各种日期和时间操作,例如日期解析、日期格式化、时区转换、日期加减等。Maya 在使用上比标准库的 datetime 模块更加直观、易用,同时支持更多的时区功能和格式化选项。

Maya 的主要特点包括:

  1. 支持 ISO-8601 格式以及其他常用格式的日期解析和格式化;
  2. 支持大部分的国际时区,并可以轻松进行时区转换;
  3. 使用 timedelta 进行日期计算,支持天数、小时、分钟、秒等的加减运算;
  4. 支持各种日期和时间的比较和排序;
  5. 可以很方便地与标准库的 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 - dt
print(delta)

这些代码展示了如何使用 Maya 解析日期字符串、获取日期和时间的各个部分、进行时区转换、进行日期计算和比较等基本操作。Maya 还支持更多的功能,例如处理日期范围、本地化日期和时间、格式化日期和时间等。更多信息可以参考 Maya 的文档。

https://github.com/timofurrer/maya

6. python-decouple

解耦是编码中最佳实践之一。这个库将帮助你实现严格的配置与代码分离。它可以帮助你组织你的设置,以便你可以在不必重新部署应用程序的情况下更改参数。它还包括许多其他功能,如定义全面的默认值、正确转换值为正确的数据类型、只有一个配置模块来管理所有实例等等。这个库在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 urlparse
result = 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

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]+)+#39;},
    '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 工具库,欢迎你在评论区补充。感谢你的阅读,如果你喜欢我的分享,别忘了点赞转发,让更多的人看到,最后别忘记了关注「前端达人」,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

展开阅读全文

页面更新:2024-05-01

标签:轮子   字段   示例   应用程序   脚本   日期   轻松   代码   简单   服务器   文件   时间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top