python编程软件用哪个好 常用python编程软件推荐

当开始一个新的Python项目时,很容易没有计划地直接进入编码过程。花一点时间,用最好的工具搭建项目,会节省很多时间,带来更快乐的编码体验。在一个理想的世界中,所有的开发人员使用相同的依赖库,代码将被完美地格式化,常见的错误将被禁止,测试将覆盖一切。此外,这些需...

当开始一个新的Python项目时,很容易没有计划地直接进入编码过程。花一点时间,用最好的工具搭建项目,会节省很多时间,带来更快乐的编码体验。

在一个理想的世界中,所有的开发人员使用相同的依赖库,代码将被完美地格式化,常见的错误将被禁止,测试将覆盖一切。此外,这些需求将在每次提交代码时得到保证。

在这篇文章中,我将介绍如何建立这样一个理想的项目。您可以遵循我的步骤,或者您可以开始安装pipx和pipenv,然后生成一个新项目。

让我们创建一个新的项目目录:

mkdir best_practicescd best_practices

Python命令行工具和pipx

Pipx是一个方便的实用程序,允许快速安装python命令行工具。我们将用它来安装pipenv和cookiecutter。

python3 -m pip install --user pipxpython3 -m pipx ensurepath

使用pipenv进行依赖关系管理

Pipenv自动为您的项目创建和管理virtualenv,并在安装/卸载软件包时从Pipfile中添加/删除软件包。它还生成一个非常重要的Pipfile.lock文件,用于生成确定性的构建。

知道你和你的同事正在使用相同的库版本可以极大地增强信心。Pipenv可以做到这一点,所以在过去一年多的时间里受到了大量开发者的青睐。

pipx install pipenv

使用black和isort进行代码格式化

黑色是一种代码格式化工具:

Black是一个不折不扣的Python代码格式化程序。通过使用它,您同意放弃对手动格式化细节的控制。作为回报,Black为您提供了速度和确定性,您不必处理pycodestyle的繁琐提示。你会有更多的时间去处理更重要的事情。

不管是什么项目,黑色格式化的代码看起来都一样。习惯了之后,就不会再注意到格式的问题了,就可以专注于内容了。

黑色产生的代码差异最小,可以加快代码审查的速度。

Isort用于处理导入的排序:

Isort可以按字母顺序对import进行排序,它会自动分成多个部分。

让我们使用pipenv将它们作为开发依赖库来安装,以免使部署版本更加复杂:

pipenv install black isort --dev

Black和isort的默认选项之间存在冲突,因此我们将覆盖isort的选项配置并使用Black配置。创建setup.cfg文件并添加以下配置:

[isort]multi_line_output=3include_trailing_com***=Trueforce_grid_wrap=0use_parentheses=Trueline_length=88

我们可以像这样运行这些工具:

pipenv run blackpipenv run isort

用flake8提升风格

Flake8确保我们的代码遵循PEP8的约定。使用pipenv安装:

pipenv install flake8 --dev

就像isort一样,它需要一些配置才能与Black一起工作。将此配置添加到setup.cfg:

[flake8]ignore = E203,E266,E501,W503***x-line-length = 88***x-complexity = 18select = B,C,E,F,W,T4

现在我们可以使用pipenv运行flake8来运行flake8。

使用mypy检查静态类型

Mypy是Python中可选的静态类型检查器,旨在结合动态(或“duck”)类型和静态类型的优点。Mypy将Python的表现力和便利性与强大的类型系统和编译时类型检查结合起来。Mypy检查标准Python程序的类型,用Python VM运行Mypy基本没有运行时开销。

习惯使用Python中的类型需要时间,但好处是巨大的。Mypy官网是这样写的:

静态类型可以使程序更容易理解和维护静态类型可以帮助您更早地发现错误,并减少测试和调试静态类型可以帮助您在代码投入生产之前找到难以发现的错误 pipenv install mypy --dev

默认情况下,Mypy将递归地检查所有类型注释的导入,当库不包含这些注释时,这将导致一个错误。我们需要将mypy配置为只在我们的代码上运行,忽略任何没有类型注释的导入错误。我们假设代码存在于具有以下配置的best_practices包中。将以下配置添加到setup.cfg:

[mypy]files=best_practices,testignore_missing_imports=true

现在我们可以运行mypy:

pipenv run mypy

Mypy的快速列表:
https://mypy.readthedocs.io/en/latest/cheatsheetpy3.html

使用pytest和pytest-cov进行测试

用pytest写测试非常容易,而且消除了写测试的阻力,也就意味着我们会写更多的测试!

pipenv install pytest pytest-cov --dev

下面是pytest网站的一个简单例子:

# content of test_sample.pydef inc(x): return x + 1def test_answer(): assert inc(3) == 5

执行示例:

$ pipenv run pytest=========================== test session starts ============================platform linux -- Python 3.x.y, pytest-5.x.y, py-1.x.y, pluggy-0.x.ycachedir: $PYTHON_PREFIX/.pytest_cacherootdir: $REGENDOC_TMPDIRcollected 1 itemtest_sample.py F [100%]================================= FAILURES =================================_______________________________ test_answer ________________________________ def test_answer():> assert inc(3) == 5E assert 4 == 5E + where 4 = inc(3)test_sample.py:6: AssertionError========================= 1 failed in 0.12 seconds =========================

的所有测试都应该放在测试目录中,所以将这个配置添加到setup.cfg:

[tool:pytest]testpaths=test

我们还想检查测试覆盖了多少代码。创建一个新文件。coveragerc,用于返回应用程序代码的覆盖率统计。让我们再次假设代码位于best_practices模块中:

[run]source = best_practices

[报告]

exclude_lines = #必须重新启用标准prag*** prag***:no cover # Don ’不要抱怨缺少只调试代码:def __repr__ if self。调试# Don & # 8217如果测试不成功,不要抱怨。t命中防御性断言代码:raise assertion error raise NotImplementedError # Don ’不要抱怨不可运行的代码。t run: if 0 : if __name__ =。__***in__。:

现在我们可以运行测试并报告覆盖率。

pipenv run pytest --cov --cov-fail-under=100

如果应用程序代码的测试覆盖率小于100%,它就会失败。

Git预提交挂钩

Git hook允许您在提交或推送时运行脚本。这将使我们能够在每次提交/推送时自动运行所有格式化和测试。预提交可以帮助我们轻松配置这些挂钩:

Git hook脚本可以在提交代码评审之前帮助识别简单的问题。每次提交都要运行钩子,自动指出代码中的问题,比如缺少分号、尾部空单元格、调试语句等。在代码评审之前指出这些问题,可以让代码评审者专注于代码架构的变化,而不是浪费时间检查格式问题。

这里我们配置在提交Python文件修改时执行上述所有检查,推送时只运行pytest覆盖率测试,因为可能需要很长时间。创建一个新文件。预提交配置文件:

repos:- repo: local hooks: - id: isort name: isort stages: [commit] language: system entry: pipenv run isort types: [python] - id: black name: black stages: [commit] language: system entry: pipenv run black types: [python] - id: flake8 name: flake8 stages: [commit] language: system entry: pipenv run flake8 types: [python] exclude: setup.py - id: mypy name: mypy stages: [commit] language: system entry: pipenv run mypy types: [python] pass_filenames: false - id: pytest name: pytest stages: [commit] language: system entry: pipenv run pytest types: [python] - id: pytest-cov name: pytest stages: [push] language: system entry: pipenv run pytest --cov --cov-fail-under=100 types: [python] pass_filenames: false

如果需要跳过这些钩子,可以运行git commit & # 8211无验证或git推送–否-验证

使用cookiecutter生成项目

我们看到了理想项目中使用了哪些工具,可以固化成一个模板。生成一个新项目只需要一个命令:

pipx run cookiecutter gh:sourceryai/python-best-practices-cookiecutter

填写项目名称和仓库名称,就可以使用模板为您生成项目了。

要完成设置,请遵循以下步骤:

# Enter project directorycd <repo_name># Initialise git repogit init# Install dependenciespipenv install --dev# Setup pre-commit and pre-push hookspipenv run pre-commit install -t pre-commitpipenv run pre-commit install -t pre-push

该项目包含一个非常简单的Python文件和测试来试用这些工具。一旦对代码感到满意,就可以提交第一个git,这时所有的钩子都将运行。

本文来自MR.特别人士投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/550340.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 05-16
下一篇 05-16

相关推荐

  • 电脑最好用的pdf编辑器 常用的pdf编辑软件推荐

    PDF有很多其他电子文档格式无法比拟的优势。PDF文件格式可以将文本、格式、颜色、图形和图像独立于设备和分辨率封装在一个文件中。它可以包含电子信息,如超文本链接、声音、活动图像等。,并支持超长文件,集成度高,安全可靠。最明显的特点是文件小,便于传输和存储。PDF有

    2023-07-29 00:18:01
    536 0
  • 常用的dos命令教程 dos基本命令大全cmd

    一般来说dos命令都是在dos程序中进行的,如果电脑中安装有dos程序可以从开机选项中选择进入,在windows 系统中我们还可以从开始运行中输入cmd命令进入操作系统中的dos命令,如下图:严格的说,windows 中的命令窗口并不是真正意义上的dos操作界面,其功能并不全面,真正的dos

    2023-07-28 17:35:01
    331 0
  • f键有什么作用 常用快捷键分享

    规划1: @习习习习习习习习习习习习习习习习习习习习习习习习20运维:为什么不说F键?2:因为他的F键失效了。。。。我第一次没反应过来。看了评论才知道怎么回事。f键顺序错误,无法键入。那么F键失效会怎么样呢?我们在工作中什么时候会用到F键?今天我们来解释一下常见的快捷键

    2023-07-27 22:50:01
    428 0
  • 卢松松:视频号常用的8种涨粉方法

    这年头,视频号就是一个小风口,主要是给大家一个平等的发展机会。最近卢松松一直在玩视频号,做直播,我就总结一下最近常用的增加视频号的方法,分享给大家。1,内容是粉色的首先要明确,内容是涨粉的核心。从私有领域到公共领域的流量,都可以依靠优质内容。一旦进入公共领

    2023-07-27 11:50:01
    116 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信