当前位置:首页 > 科技  > 软件

四个工具帮你轻松将python项目发布到生产环境

来源: 责编: 时间:2023-11-21 09:39:10 394观看
导读构建良好的软件遵循特定规则并强制执行行业标准,同时需要考虑:依赖关系、代码质量、工作流程、凭据。但这些如何反映在现实代码库中呢?在这篇文章中,我将向您展示我在Python项目中设置的4个工具,以便简化开发工作流程并强

构建良好的软件遵循特定规则并强制执行行业标准,同时需要考虑:依赖关系、代码质量、工作流程、凭据。但这些如何反映在现实代码库中呢?在这篇文章中,我将向您展示我在Python项目中设置的4个工具,以便简化开发工作流程并强制执行一些优秀实践。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

1. Poetry

J7l28资讯网——每日最新资讯28at.com

当我开始一个新项目时,我通常使用Poetry来管理依赖关系并创建一个全新的虚拟环境。这在不同项目依赖于相同包的不同版本时非常有用。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

Poetry是一个很好的工具,因为它在解析依赖关系方面速度很快。它还通过用户友好的CLI易于使用,并有助于快速打包和分发您的代码。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

以下是如何使用Poetry启动新项目的方法:J7l28资讯网——每日最新资讯28at.com

poetry init

J7l28资讯网——每日最新资讯28at.com

一旦你按下yes,就会创建一个pyproject.toml文件,用于包含项目的 metadata。这个文件可以提交到Git,并与您的同事共享,以重现相同的环境。项目设置完成后,您可以使用add命令添加依赖项。示例:J7l28资讯网——每日最新资讯28at.com

poetry add pandas

J7l28资讯网——每日最新资讯28at.com

您还可以分组依赖项。例如,您可以将black和isort添加为开发依赖项到dev组。示例:J7l28资讯网——每日最新资讯28at.com

poetry add black --group dev

J7l28资讯网——每日最新资讯28at.com

如果再次查看pyproject.toml文件,我们将注意到依赖项的两个单独部分:J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

为什么这有用呢?J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

分组使您能够轻松管理不同环境的依赖关系。例如,如果您有开发和测试依赖项,您可能希望在生产设置中安装项目库时忽略它们。这是如何做到的:J7l28资讯网——每日最新资讯28at.com

poetry install --without dev,test

J7l28资讯网——每日最新资讯28at.com

依赖项安装在哪里?J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

Poetry为每个项目创建一个虚拟环境。它位于隐藏的.venv文件夹中。您可以使用poetry shell命令激活它,并访问其特定的二进制文件(python、pip、black等)。更多功能可以查看官方文档以了解更多信息。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

2. Pre-commit hooks

J7l28资讯网——每日最新资讯28at.com

如果您是Python开发人员,您可能经常会遇到这样的情况:您的团队成员具有不同的编码风格,这使得代码库不一致。结果,这导致错误,降低了生产力,并使协作困难。pre-commit hooks就可以解决这个问题,它在每次提交之前自动运行的脚本,用于检查您的代码是否存在错误。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

在我的项目中,我通常会在我的预提交配置中添加这些脚本:J7l28资讯网——每日最新资讯28at.com

  • black — 用于格式化代码
  • pydoctyle — 确保代码文档符合Google的标准
  • pycln — 用于删除未使用的导入
  • trailing-whitespace — 用于删除额外的空格
  • unitest — 用于运行单元测试和检测破坏性更改

J7l28资讯网——每日最新资讯28at.com

要配置这些首先需要安装pre-commit包:J7l28资讯网——每日最新资讯28at.com

pip install pre-commit或者poetry add pre-commit

然后,您需要在名为.pre-commit-configuration.yaml的YAML文件中进行定义。以下是我通常使用的一个:J7l28资讯网——每日最新资讯28at.com

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 命令进行安装:J7l28资讯网——每日最新资讯28at.com

pre-commit install

另外,如果您尝试提交没有文档的代码,您将收到此错误,不会提交任何内容到git。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

这将迫使您修复代码,然后再次提交。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

3. Makefiles

J7l28资讯网——每日最新资讯28at.com

Makefile将一系列shell命令分组在一个快捷方式(也称为目标)下。想象一下,每次更新代码时都必须运行以下单元测试命令:J7l28资讯网——每日最新资讯28at.com

poetry run coverage run -m pytestpoetry run coverage reportpoetry run coverage html

那不是很繁琐吗?使用Makefile,您可以将这三个命令分组在一个 test 目标下。现在,您只需运行make test,而不是输入这三行,这避免了不必要的代码输入或记住复杂的指令。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

Makefile还有助于简化其他任务,如:J7l28资讯网——每日最新资讯28at.com

  • 安装依赖项
  • 设置环境变量
  • 运行脚本
  • 构建和推送Docker镜像
  • 构建文档
  • 为代码添加样式

J7l28资讯网——每日最新资讯28at.com

以下是我在我的一个开源项目中使用的Makefile示例:J7l28资讯网——每日最新资讯28at.com

DOCKER_IMAGE := ahmedbesbes/cowriterVERSION := $(shell git describe --always --dirty --long)ifneq (,$(wildcard ./.env))    include .env    exportendifrun-cowriter:  @poetry run python -m src.mainrun-cowriter-job:  @poetry run python -m src.jobrun-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_joblint: @poetry run black .test:  @poetry run coverage run -m pytest @poetry run coverage report @poetry run coverage html

Makefiles通常易于阅读和理解,清晰地显示了项目的不同部分是如何组织的,以及它们如何相互依赖。这对于新团队成员入职或一段时间后重访自己的项目尤其有帮助。J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

4. python-dotenv

J7l28资讯网——每日最新资讯28at.com

作为开发人员,我使用Python构建依赖于凭据和敏感设置的应用程序。以下是这些凭据的一些示例:J7l28资讯网——每日最新资讯28at.com

  • 用于访问第三方服务的API密钥
  • 密码和凭据
  • 标志
  • 域名或URL

⚠️ 这些凭据不应该硬编码或版本化在您的脚本中。一种安全的良好实践是将它们加载为环境变量。J7l28资讯网——每日最新资讯28at.com

import osapi_key = os.environ.get("API_KEY")

为了避免每次都使用shell命令导出环境变量,您可以使用Python dotenv包:J7l28资讯网——每日最新资讯28at.com

  • pip install python-dotenv
  • 创建一个包含键值对凭据的.env文件

J7l28资讯网——每日最新资讯28at.com

  • 将.env添加到.gitignore,以防止Git提交它
  • 使用python-dotenv模块将设置加载到您的Python文件中

J7l28资讯网——每日最新资讯28at.com

J7l28资讯网——每日最新资讯28at.com

结论

J7l28资讯网——每日最新资讯28at.com

我希望您发现这些工具有助于更好地构建Python项目的结构,并自动化繁琐和重复的任务。J7l28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-32013-0.html四个工具帮你轻松将python项目发布到生产环境

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在Golang中掌握并发和Goroutines

下一篇: 为什么Go是后端开发的未来

标签:
  • 热门焦点
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
Top