当前位置: 首页 > 科技观察

强烈推荐!优化Python开发环境,实现自动化,让你远离烦恼的几个小窍门

时间:2023-03-16 10:27:56 科技观察

Python编程是一种极好的体验,随着新版本的发布,它会越来越好!对我来说,Python库提供的大量免费函数、高度可读的程序和新引入的类型注释让我着迷。然而,对于数据科学家来说,特别容易让他们的Jupyternotebook变得又大又乱,或者写一些看不懂的python文件。此外,当项目依赖于同一库的不同版本时,经常会发生版本冲突。解决上述问题会耗费大量时间,并且经常会导致其他项目出现问题。必须找到解决方案来避免此类问题并方便编写代码。在本文中,我将详细介绍常用的工具和技巧,希望对读者有所帮助。Python开发环境一、解释器使用Python时从最重要的解释器入手。你当然可以只下载你最喜欢的Python版本,然后把所有东西都放在那里。但是如果你的程序需要不同版本的Python,或者依赖同一个第三方模块的不同版本,需要在多个程序之间无缝切换怎么办?Pyenv可以解决以上问题。Pyenv一共包含三个工具,笔者将介绍其中的两个:pyenv(用于安装python)和pyenv-virtualenv(用于配置全局工具)。从下面的URL安装pyenv。卷曲https://pyenv.run|bash安装后,将以下代码添加到.bashrc(或.zshrc)文件中,使pyenv可用于设备。exportPATH="~/.pyenv/bin:$PATH"eval"$(pyenvinit-)"eval"$(pyenvvirtualenv-init-)"最后,重启设备。现在你可以使用pyenv来安装几乎所有的python解释器,包括pypy、anaconda。需要注意的是,pyenv只是在电脑上搭建本地的python环境。搭建python环境需要各种函数库。在Ubuntu系统的电脑上,必须安装以下库,以防止运行出现问题。sudoapt-getinstallbuild-essentiallibsqlite3-devsqlite3bzip2libbz2-devzlib1g-devlibssl-devopenssllibgdbm-devlibgdbm-compat-devliblzma-devlibreadline-devlibncursesw5-devlibffi-devuuid-dev现在,要安装python解释器,只需执行以下命令。pyenvinstallVERSION_YOU_WOULD_LIKE_TO_INSTALL可以通过pyenv列出所有可用的版本。pyenvinstall--list为了让上面的过程更加具体,这里安装python3.7.5,并设置为默认的全局解释器。pyenvinstall3.7.5pyenvglobal3.7.5输入Python-version命令,屏幕显示Python3.7.5。2.依赖管理(DependencyManagement)Python中的依赖管理是一个繁重的工作量。有许多工具可以帮助完成这项任务。我最常用的工具是诗歌。诗歌可以帮助你简单地完成以下任务。管理项目依赖关系通过虚拟环境分离项目轻??松构建应用程序和库作者建议通过以下方式安装诗歌:curl-sSL管理依赖关系的另一种方法是使用pip和pyenv-virtualenv指令。读者可能会问:为什么不直接使用pip?因为仅使用pip可能会在全局环境中安装poetry及其依赖项,而这可能是您不需要或不想要的。必要的命令如下。#Createavirtualenvironmentcalledtoolsthatisbasedon3.7.5pyenvvirtualenv3.7.5tools#Installpoetryintothetoolsvirtualenvpyenvactivatetoolspipinstallpoetry#Checkinstalledpoetryversionpoetry--version#Leavethevirtualenvpyenvdeactivate#Thisdoesnotworkyetpoetry--version#Addyourtoolsvirtualenvtothegloballyavailableonespyenvglobal3.7.5tools#Nowthisworksandyoucanstartusingpoetrypoetry--version在使用poetry创建第一个项目之前,建议先对其进行配置,这样您可以在项目目录下的.venv文件夹中创建一个虚拟环境。当你使用VsCode或Pycharm等集成开发环境时会变得非常方便,因为它们可以立即识别并选择正确的解释器。poetryconfigsettings.virtualenvs.in-projecttrue注意只需要设置一次配置,设置结果会保留在全局环境中。终于完成了用诗歌创建项目的所有准备工作,太棒了!我将这个项目命名为dsexample,我知道这个名字很愚蠢,但我不想浪费时间去想一个更好的名字。为了展示如何使用诗歌,我添加了特定版本的pandas库,以及fastapi框架的所有额外要求。#Initialzeanewprojectpoetrynewdsexamplecddsexample#Addmodulesandcreatevirtualenvironment.poetryaddpandas=0.25fastapi--extrasall#Asanexampleofhowyoucouldaddagitmodulepoetryaddtf2-utils--gitgit@github.com:Shawe82/tf2-utils.git要查看使用我在本文中推荐的工具的实际项目,请访问Githubstorehouse。3.一致的格式和可读性(ConsistentFormattingandReadability)现在项目已经创建好了,是时候开始添加代码了。理想情况下,代码库的格式应该保持一致,以确保可读性和可理解性。这可能是一个非常乏味的过程,尤其是当有其他人在处理代码库时。但是上面的问题都可以用黑来解决!black是一个让程序员在编写python代码时可以专注于核心内容的工具。它自动为代码添加格式,避免程序员手动添加格式。因为Black效果很好,我们将它添加到dsexample并让它为所有文件添加格式。#Weaddblackasadevelopmentdependencywith--devaswedon't#needitwhenitcomestoproductionpoetryadd--devblack=19.3b0#Assumeweareinsidethecurrenttopleveldsexamplefolderpoetryrunblack。太好了,现在所有文件看起来都非常整洁。4.Type-Correctness从Python3.5(没记错的话请指正)开始,类型注解成为了标准库的一部分。通过类型注解,代码更好理解,更容易维护,更不容易出错。为什么它不容易出错?因为你可以静态地检查变量和函数的类型是否符合预期。当然,它必须自动完成。下面介绍mypy。Mypy是一个静态python代码检查器,可以在错误发生之前发现错误。将mypy添加到带有诗歌和代码审查的项目中就像添加黑色一样简单。#Weaddmypyasadevelopmentdependencywith--devaswedon't#needitwhenitcomestoproductionpoetryadd--devmypy#Assumeweareinsidethecurrenttopleveldsexamplefolderpoetryrunmypy。运行mypy也会造成很多麻烦。当然,它可以设置为只警告你关心的错误。这可以通过向项目添加mypy.ini文件来实现。5.自动化Automation使用black和mypy,我们不再需要手动格式化代码,避免不必要的错误。但是我们仍然需要手动使用这两个工具,这两个工具不应该是自动化的吗?是的!预提交可以做任何事情。Pre-commit工具是在代码提交到仓库之前进行检查(我默认读者的代码是在git的控制下)。检查失败的代码将被拒绝。这样代码存储库将永远不会有格式错误或未经检查的代码,或您需要检查错误的任何其他代码。现在安装预提交。可以使用poetry直接安装在项目中,也可以安装在本地机器上。笔者更喜欢后者,因为precommit只是在本地使用,不会在CI/CD服务器上使用。相反,black和mypy在CI/CD服务器上运行,因此将它们添加到项目的开发依赖项中是有意义的。作者推荐使用以下方法通过已有的工具虚拟环境安装#Installpre-commitintothetoolsvirtualenvpyenvactivatatetoolsspipinstallpre-commit#Leavethevirtualenvpyenvdeactivate#Aswehavealreadyaddedthetoolvenv,itwillworkdirectlypre-commit--version要使用pre-commit,首先需要添加一个名为.pre的文件顶层文件夹-commit-config.yarm文件。在这个文件中,您需要配置所有应该运行的挂钩。在mypy和Black的环境下,文件内容如下。回购协议:-repo:https://github.com/ambv/blackrev:19.3b0hooks:-id:blacklanguage_version:python3.7-repo:https://github.com/pre-commit/mirrors-mypyrev:v0.740hooks:-id:mypy最后,你必须执行以下命令来设置钩子。#Iassumeyourareinthetoplevelfolderpre-commitinstall该挂钩现在将在每次提交时运行。黑色工具的钩子功能不仅会检查格式,还会相应地为文件添加格式。每次添加新的钩子函数时,建议首先对所有文件手动运行预提交,因为它只能影响自上次提交后发生更改的文件。pre-commitrun--all-files这样就完成了自动化工具的自动化。总结有许多工具可以帮助您专注于重要的事情。这里笔者只介绍其中的几个。当然,还有更多。希望在学习新东西之后,您可以更多地关注代码本身。