Python开发生产环境常用的4个工具(实用推荐)
作者:简讯Alfred 爱生活爱扣钉
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
命令激活它,并访问其特定的二进制文件(python
、pip
、black
等)。
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开发生产环境工具的资料请关注脚本之家其它相关文章!