在程序开发过程中,良好的开发环境和工具堆栈可以帮助我们大大提高开发效率,避免在外围琐事上浪费大量时间。本文以Python为例,教大家如何快速创建一个完美的Python项目开发环境:内容包括模块依赖管理、代码风格管理、调试和测试管理、git版本管理、使用Git钩子进行项目规范检查等。
pipxPipx是一个跨平台的Python环境隔离管理工具,可以在Linux、Mac操作系统和Windows上运行默认情况下,Pipx在个人用户的条件下建立一个虚拟的Python环境,从而建立一个实现完全隔离的Python运行环境Pipx的安装需要Pthon 3.6和更高版本:
python 3-m pipinstall-user Pipx python 3-m Pipx ensurepath
upgrade Pipx使用:
python 3-m pip install-u Pipx
包依赖关系管理pipenvPipenv自动为项目创建和管理虚拟环境,以pipfile文件方式管理项目的依赖包,并支持包安装和卸载与requirements.txt不同,pipfile是TOML格式,支持开发环境和正式环境,并且还可以使用Pipfile.lock来锁定环境版本。可以使用PIPX:
PIPX INSTALL PIPE NV
来安装Pipxenv。一些发行版也可以通过其软件包管理器直接安装:
。例如,MacOS可以在
brew INSTALL PIPENV
下使用。pipfile的示例如下:
Pipfile。锁定示例部分如下:
-3代码样式代码格式黑色Black是一个用于格式化Python代码的程序它可以自动帮助我们调整和统一代码格式,提高代码的效率和可读性。此外,通过Black减少代码风格的差异可以极大地提高团队代码审查的效率。
黑色格式示例如下:
原始代码:
def verty _ important _ function(template:str,* variables,file: os.pathlike,engine: str,header: bool = True,debug: bool = False):" " "将` variables '应用于` template '并写入` file `。"""以打开(文件,W ')为f:...
格式化代码:
def what _ important _ function(template:str,* variables,file: os.pathlike,engine: str,header: bool = True,debug: bool = False),: "将` variables '应用于` template '并写入` file '"""带打开(文件," w ")的asf:...
iosort美化了部分导入代码Python开发经常需要导入第三方的模块,经常这部分代码比较混乱,使用iosort可以美化这部分代码管理程序可以按字母顺序对导入进行排序,并自动将其分成多个部分。
我们可以使用pipenv安装Black和I sort:
pipenv安装Black I sort-dev
I sort。我们可以看到下面的动态图:当同时使用
Black和iosort时,两者的默认配置不兼容。我们需要覆盖iosort配置,以black的格式优先。并添加以下配置来完成此任务检查
lake 8示例的结果,py:
lake 8将默认忽略一些约定(e,f)。如果我们检查所有惯例:
flake E8-选择e,f示例。py,结果:
与管理程序相同,为了与Black兼容,在设置中需要额外的配置。CFG:
ypy是Python的可选静态类型检查器,它可以使用结合了动态(或“鸭”)和静态类型优点的其他代码的性能Mypy将Python的动态类型便利性和表达性优势与静态类型密集型系统和编译时类型检查相结合,并生成本机代码,该代码支持通过Python虚拟机运行,并且可以在没有运行时开销的情况下以高性能运行在Python中使用静态类型的优点是:
可以使程序更容易理解和维护;
可以在编译时帮助调试和查找错误,并减少测试和调试。
可以在代码部署到生产环境之前发现难以捕捉的错误
您可以使用pipenv直接安装Mypy:
pipe NV安装Mypy–dev
Mypy动态和静态类型一个示例如下:
项目配置默认情况下,Mypy递归检查所有类型的注释的导入,这在库不包含这些注释时会导致错误mypy配置需要修改,以便只检查当前运行的代码,忽略没有类型注释的导入模块这也可以在setup中设置。cfg:
可以使用pipenv添加测试包和扩展:
pipenv installpytest pytest-cov-dev
pytest framework可以使编写小测试变得容易,并支持以扩展的方式提供更复杂的功能以下是pytest网站的一个简单示例:
# test _ sample . pydef Inc(x):returnx+1 deftest _ answer:assertinc(3)= 5
tests
pipenov runpytest
结果如下:
pytest-cover是pytest的单元测试线覆盖率的插件pytets-cov测试结果的示例如下:
pytest有许多扩展:
pytest-cov:单元测试覆盖率报告
pytest-django:单元测试框架
pytest-asyncio:支持asynco
pytest-twisted:单元测试框架
pytest-insta fail for twisted frame:错误消息
pytest-cov测试结果的示例如下在
项目配置项目中,所有测试都应该放在测试目录中。我需要向setup.cfg:
添加一个配置。我们上面提到的Python项目应该拥有的工具集和配置可以用作模板。cookiecutter的模板定义示例如下:
cookie cutter。JSON {"full _ name": "chong chong "," email": "chong chong @ ijz.me "," project _ name": "python-practice "," repo _ name ":" python-Practice "," project_short_description ":"简单Python开发实践示例。“,”release _ date“:“2019-09-02”,“年”:“2019”,“版本”:“0 . 0 . 1”}
,然后使用cookiecutter自动生成校正工作:
pipxrun cookie cutter Python-练习cdpython-练习gitinit
安装依赖关系
pipe nvinstall-dev
运行预提交和预推挂钩:
通过这些操作,可以自动生成Python项目、代码样式检查、代码测试等。,我们可以创建一个高效和完美的Python开发环境。