Python开发生产环境常用的4个工具(实用推荐)

 更新时间:2024年01月23日 14:33:02   作者:简讯Alfred 爱生活爱扣钉  
构建优秀的软件需要遵循特定的规则并执行行业标准,如何在真实的生产环境开发中体现呢?在这篇文章中,我将向您展示我在Python项目中设置的4种工具,以简化开发工作流程并执行一些最佳实践,这些工具帮助我提高了效率,节省了时间,希望你读完也能有所收获

Poetry

在启动一个新项目时,我通常会使用 Poetry 来管理依赖关系,并创建一个全新的虚拟环境。这在不同项目依赖同一软件包的不同版本时非常有用。

Poetry 是一款出色的工具,因为它能快速解决依赖关系问题。通过友好的 CLI,它还易于使用,并有助于快速打包和发布代码。

我们输入 poetry init 来启动一个新项目。

输入 "yes" 后,就会创建一个包含项目元数据的 pyproject.toml 文件。该文件可以提交到 Git,并与同事共享,以重现相同的环境。项目设置完成后,就可以使用 add 命令添加依赖关系了。

示例:poetry add pandas

您还可以对依赖项进行分组。

例如,您可以将 black 和 isort 作为开发依赖项添加到 dev 组。

示例:poetry add black --group dev

如果我们再次查看 pyproject.toml 文件,就会发现其中有两个独立的依赖关系部分:

这有什么用?

有了群组,你就可以轻松管理每个环境的依赖关系。例如,如果您有开发和测试依赖项,您可能希望在生产环境中安装项目库时忽略它们。

你可以这样使用它:

poetry install --without dev,test

这些依赖项安装在哪里?

Poetry 为每个项目创建一个虚拟环境。它位于一个隐藏的 .venv 文件夹中。你可以使用 poetry shell 命令激活它,并访问其特定的二进制文件(pythonpipblack 等)。

Pre-commit hooks

作为一名 Python 开发人员,您可能会经常遇到这样的情况:您的团队成员拥有不同的编码风格,会让代码难以阅读,导致工作效率的降低,并使协作变得困难。pre-commit 就是用来解决这个问题的。

pre-commit 是在每次提交前自动运行的脚本,用于检查代码是否存在错误。这些 hooks 与语言无关,有助于在提交到版本库之前发现问题,确保只提交高质量的代码。

我通常会在 pre-commit 中添加这些脚本:

• black - 用于格式化代码

• pydoctyle - 确保代码文档符合 Google 标准

• pycln - 删除未使用的导入

• trailing-whitespace - 删除多余的空格

• unitest - 运行单元测试并发现破坏性修改

要配置这些 pre-commit,首先需要安装 pre-commit 软件包。

# pip 安装
pip install pre-commit

# poetry 安装
poetry add pre-commit

然后,你需要在名为 .pre-commit-configuration.yaml 的 YAML 文件中定义 hooks。

下面是我通常使用的文件:

repos:
-   repo: https://github.com/psf/black
    rev: '23.1.0'
    hooks:
    -   id: black
        args: [--config=pyproject.toml]

-   repo: https://github.com/pycqa/pydocstyle
    rev: '6.3.0'
    hooks:
    -   id: pydocstyle
        args: ['.']

-   repo: https://github.com/hadialqattan/pycln
    rev: 'v2.1.5'
    hooks:
    -   id: pycln
        args: ['.']

-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: 'v4.4.0'
    hooks:
    -   id: trailing-whitespace

-   repo: local
    hooks:
    -   id: unittest
        name: run unit tests
        language: system
        pass_filenames: false
        entry: poetry run coverage run -m pytest

现在,您需要使用 install 命令安装这些 hooks:

pre-commit install

可以开始了,让我们试试这个。如果您尝试提交文档缺失的代码,您将会收到这样的错误信息,并且什么都不会提交到 git。

这将迫使你修复代码并再次提交。

Makefiles

Makefile 将一系列 shell 命令组合在一个快捷方式。我们来看一个例子。想象一下,每次更新代码时都要运行以下单元测试命令:

poetry run coverage run -m pytest
poetry run coverage report
poetry run coverage html

这些乏味且重复的工作完全可以使用 Makefile,将这三个命令集中到一个测试目标下。

现在,不用再键入这三行,只需运行:make test。这样就避免了不必要的代码键入或记忆复杂的指令。Makefile 还有助于简化其他任务,例如:

• 安装依赖项

• 设置环境变量

• 运行脚本

• 构建和推送 Docker 映像

• 构建文档

• 设计代码风格

下面是我在一个开源项目中使用的 Makefile 实例:

DOCKER_IMAGE := ahmedbesbes/cowriter
VERSION := $(shell git describe --always --dirty --long)
ifneq (,$(wildcard ./.env))
    include .env
    export
endif
run-cowriter: 
 @poetry run python -m src.main
run-cowriter-job: 
 @poetry run python -m src.job
run-web-agent: 
 @rm -rf db/ && poetry run python -m src.actions.web_searcher 
build-image:
 @docker build . -t $(DOCKER_IMAGE):$(VERSION)
push-docker-image-to-artifact-registry:
 @gcloud builds submit --tag gcr.io/$(PROJECT_ID)/run_cowriter_job
lint:
 @poetry run black .
test: 
 @poetry run coverage run -m pytest
 @poetry run coverage report
 @poetry run coverage html

Makefile 通常易于阅读和理解,可以清楚地说明项目的不同部分是如何组织的,以及它们是如何相互依赖的。这对团队新成员的入职培训或一段时间后重新审视自己的项目特别有帮助。

python-dotenv

作为一名 Python 开发人员,常常会涉及到敏感信息和一些凭证(例如 auth 或者 token),下面是一些例子:

• 访问第三方服务的 API 密钥

• 密码和凭证

• 域名或 URL

记住,绝不应在脚本中硬编码版本化这些凭据。因为会导致许多不安全的因素。一种安全且良好的做法是将它们加载为环境变量。

import os

api_key = os.environ.get("API_KEY")

为了避免每次都使用 shell 命令导出环境变量,可以使用 Python 的 dotenv 软件包:

1. pip install python-dotenv

2. 创建一个 .env 文件,其中包含键值对中的凭据

3. 将 .env 添加到 .gitignore 以防止 Git 提交它

4. 使用 python-dotenv 模块将设置加载到 Python 文件中

希望这些技巧对你更好地构建 Python 项目和自动化繁琐的任务有所帮助。记得收藏,并反复阅读。

以上就是Python开发生产环境常用的4个工具(实用推荐)的详细内容,更多关于Python开发生产环境工具的资料请关注脚本之家其它相关文章!

相关文章

  • Django框架使用mysql视图操作示例

    Django框架使用mysql视图操作示例

    这篇文章主要介绍了Django框架使用mysql视图操作,结合实例形式分析了mysql视图的创建、查看以及Django框架使用mysql视图相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • 浅谈Python的方法解析顺序(MRO)

    浅谈Python的方法解析顺序(MRO)

    这篇文章主要介绍了浅谈Python的方法解析顺序(MRO),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python3使用requests模块实现显示下载进度的方法详解

    Python3使用requests模块实现显示下载进度的方法详解

    这篇文章主要介绍了Python3使用requests模块实现显示下载进度的方法,结合实例形式分析了Python3中requests模块的配置、使用及显示进度条类的相关定义方法,需要的朋友可以参考下
    2019-02-02
  • Python多进程并发(multiprocessing)用法实例详解

    Python多进程并发(multiprocessing)用法实例详解

    这篇文章主要介绍了Python多进程并发(multiprocessing)用法,实例分析了multiprocessing模块进程操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Python_查看sqlite3表结构,查询语句的示例代码

    Python_查看sqlite3表结构,查询语句的示例代码

    今天小编就为大家分享一篇Python_查看sqlite3表结构,查询语句的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python中max函数用法实例分析

    Python中max函数用法实例分析

    这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 基于进程内通讯的python聊天室实现方法

    基于进程内通讯的python聊天室实现方法

    这篇文章主要介绍了基于进程内通讯的python聊天室实现方法,实例分析了Python聊天室的相关实现技巧,需要的朋友可以参考下
    2015-06-06
  • 详解Python如何实现Excel数据读取和写入

    详解Python如何实现Excel数据读取和写入

    这篇文章主要为大家详细介绍了python如何实现对EXCEL数据进行读取和写入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Python数据结构之循环链表详解

    Python数据结构之循环链表详解

    循环链表 (Circular Linked List) 是链式存储结构的另一种形式,它将链表中最后一个结点的指针指向链表的头结点,使整个链表头尾相接形成一个环形,使链表的操作更加方便灵活。本文将详细介绍一下循环链表的相关知识,需要的可以参考一下
    2022-01-01
  • Python结合百度语音识别实现实时翻译软件的实现

    Python结合百度语音识别实现实时翻译软件的实现

    这篇文章主要介绍了Python结合百度语音识别实现实时翻译软件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论