社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

神级操作!优化​Python开发环境的几个技巧

编程派 • 5 年前 • 513 次点击  

今天看到一篇 Django 联合创始人(cocreator,姑且这么叫)的一篇文章,里面推荐了自己的 Python 开发环境配置,用到了 pyenv、pipx、poetry。还没准备翻成中文,就发现在本文里都有介绍,因此将本文推荐给大家。


(本文素材来源于网络)


用Python编代码体验极佳,并且随着新版本的发布越来越好!


对于很多人而言,Python提供的大量免费函数库、高可读性的程序和新引入的类型注释让很多爱不释手。


然而,数据科学家特别容易使自己的Jupyter notebook变得庞大而杂乱,或者写出一些难以理解的python文件。


此外,当一个项目依赖于同一函数库的不同版本时,常常发生版本冲突。


修复以上问题消耗大量时间,还经常导致其他项目出现问题。必须找到避免这类问题的解决方式,为编写代码提供便利。

 

在本篇文章中我将详细介绍常用的工具与技巧,希望能给大家提供帮助。 



1


Python开发环境

解释器:


从使用Python最重要的解释器开始。你可以只下载最喜欢的Python版本,然后把所有内容放在里面。


但如果你的程序需要不同版本的Python,或依赖于同一第三方模块的不同版本,并需要在几个程序之间无缝切换时该怎么办?

 

Pyenv可以解决上述问题。

 

Pyenv共包含三个工具,下面将介绍其中两个:pyenv(用于安装python)pyenv-virtualenv(用于配置全局工具)。

 

可通过下方网址安装pyenv:

curl https://pyenv.run | bash

 

安装后,向.bashrc(或.zshrc)文件中添加下方代码,使得pyenv可用于设备。

 


exportPATH="~/.pyenv/bin:$PATH"eval "$(pyenv init -)"eval "$(pyenv virtualenv-init -)"



最后,重启设备。


现在可以使用pyenv安装几乎所有的python解释器,包括pypy、anaconda。

 

需要注意的是,pyenv只在电脑上搭建本地python环境。搭建python环境需要多种函数库。


在Ubuntu系统的电脑上,必须安装以下函数库以防止运行出现问题。

 


sudo
apt-get installbuild-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev
zlib1g-dev libssl-dev openssllibgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libncursesw5-devlibffi-dev uuid-dev



现在,要安装python解释器只需要执行以下指令。

 





    

pyenv installVERSION_YOU_WOULD_LIKE_TO_INSTALL



可以通过pyenv列出所有可用版本。

 


pyenv install --list



为了使上述过程更加具体,在此安装python3.7.5并且设置其为默认的全局解释器。

 


pyenv install 3.7.5pyenv global 3.7.5



输入Python-version指令,屏幕将显示Python3.7.5。

 

依赖性关系管理(DependencyManagement)

 

Python中的依赖性管理是项繁重的工作。有许多工具可以帮助完成这项任务。

 

我最常使用的工具是Poetry

 

Poetry可以帮助你简单地完成如下工作。

 

管理项目依赖关系

通过虚拟环境将项目分开

轻松构建应用程序与函数库

 

推荐通过以下方式安装poetry:

 

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

 

另外一种依赖性管理的方式是使用pip和pyenv-virtualenv指令。


大家可能会问:为什么不只用pip?


因为只用pip可能会在全局环境中安装poetry及其依赖项,这可能是你不需要也不想要的。


必要指令如下:



# Create a virtual environmentcalled tools that is based on 3.7.5pyenv virtualenv 3.7.5 tools# Install poetry into the tools virtual envpyenv activate toolspip install poetry# Check installed poetry versionpoetry --version# Leave the virtual envpyenv deactivate# This does not work yetpoetry --version# Add your tools virtual env to the globally available onespyenv global 3.7.5 tools# Now this works and you can start using poetrypoetry --version



在使用poetry创建第一个项目之前,建议先对其进行配置,这样就可以在项目目录中的.venv文件夹中创建虚拟环境。


当你使用VsCode或Pycharm这类集成开发环境时就会变得非常方便,因为它们可以立即识别并选择正确的解释器。



poetry configsettings.virtualenvs.in-project true



注意:你只需设置一次配置,设置结果将在全局环境保留。

 

终于完成了使用poetry创建项目的所有准备工作,我把这个项目命名为dsexample,为了展示如何使用poetry,我添加了一个特定版本的pandas库,以及所有额外需求的fastapi框架。



# Initialze a new projectpoetry new dsexamplecd dsexample# Add modules and create virtual environment.poetry add pandas=0.25 fastapi --extras all# As an example of how you could add a git modulepoetry add tf2-utils --git git@github.com:Shawe82/tf2-utils.git



格式一致性与可读性(Consistent Formatting and Readability)

 

现在,已经创建好了项目,即将开始添加代码。理想情况下,代码库的格式应该一致,以确保可读性和可理解性。这将是一个非常沉闷乏味的过程,尤其在还有其他人操作代码库时。

 

但用Black可以解决上述问题!

 

Black是一种让程序员在编写python代码时能将精力集中于核心内容的工具。它自动为代码添加格式,避免程序员手动添加格式。


因为Black的效果非常好,我们把它添加到dsexample中,让它为所有的文件添加格式。



# We add black as a developmentdependency with --dev as we don't# need it when it comes to productionpoetry add --dev black=19.3b0# Assume we are inside the current toplevel dsexample folderpoetry run black .



好了,现在所有的文件看起来非常整齐了。

 

类型纠正(Type-Correctness)

 

自Python3.5开始,类型注释开始成为标准库的一部分通过类型注释,代码更好理解,更易维护,不易出错。


为什么会不易出错呢?因为可以静态地检查变量和函数的类型是否符合预期。当然,必须是自动完成的。

 

下面介绍mypy!

 

Mypy是一种静态python代码检查器,作用是在错误发生之前找到他们。使用poetry向项目中添加mypy并进行代码检查与添加black一样简单。






    

# We add mypy as a developmentdependency with --dev as we don't# need it when it comes to productionpoetry add --dev mypy# Assume we are inside the current toplevel dsexample folderpoetry run mypy .



运行mypy也可能导致很多麻烦。当然,可以将其设置为只对你关心的错误发出警告。这可以通过在项目中添加mypy.ini文件实现。

 

将自动化工具自动化(Automate the Automation)

 

使用black和mypy,我们不再需要手工为代码添加格式,并且可以避免不必要的错误。


但是我们仍需要手动使用这两个工具,这两个工具不是应该也自动化吗?

 

是的!

 

Pre-commit可以完成一切。

 

Pre-commit工具是在代码提交到仓库前执行检查(我默认读者的代码处在git的控制下)。无法通过检查的代码将被拒绝。


这样代码仓库就永远不会出现格式不整齐或是未经类型检查的代码,以及任何其他你需要检查错误的代码。

 

现在来安装pre-commit。

 

可以使用poetry将其直接安装在项目里,也可以安装在本地机器里。我倾向于后者,因为precommit只在本地使用,而不在CI/CD服务器上。


相反,black和mypy在CI/CD服务器上运行,因此,将它们添加到项目的dev依赖项是有意义的。


建议使用下面方法通过现有的工具虚拟环境安装它!

 


# Install pre-commit into the tools virtual envpyenv activate toolspip install pre-commit# Leave the virtual envpyenv deactivate # As we have already added the tool venv, it will work directlypre-commit --version



要使用pre-commit,首先需要向顶级文件夹中添加一个名为.pre-commit-config.yarm的文件。在该文件里,你需要配置所有应该运行的钩子。


在mypy与Black的环境下,文件内容如下所示:

 


repos:-   repo: https://github.com/ambv/black    rev: 19.3b0    hooks:    - id: black      language_version: python3.7-   repo: https://github.com/pre-commit/mirrors-mypy    rev: v0.740    hooks:    - id: mypy



最后,你必须执行以下命令以设置钩子。

 


# I assume your are in the toplevel folderpre-commit install



现在,钩子函数(hook)将在每次提交时运行。Black工具的钩子函数不仅会检查格式,还会相应地为文件添加格式。


每次添加新的钩子函数时,建议一开始在所有文件中手动运行pre-commit,因为它只能作用于上次提交之后更改过的文件。



pre-commit run --all-files



就这样,对自动化工具的自动化完成了。



2

总结



有很多工具可以帮助你专注于重要的事情。此处只介绍了其中的几个。当然,还有更多,希望大家学到了新的东西后,可以更加专注于代码本身。





版权说明:本文内容来自网络、版权归原作者所有,如有侵权请联系删除。

回复下方「关键词」,获取优质资源


回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~


推荐阅读



题图:pexels,CC0 授权。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49621
 
513 次点击