优化Python开发环境的几个神技巧

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

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

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

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

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

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

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.5  pyenv 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.5
pyenv virtualenv 3.7.5 tools# Install poetry into the tools virtual env
pyenv activate tools
pip install poetry# Check installed poetry version
poetry --version# Leave the virtual env
pyenv deactivate# This does not work yet
poetry --version# Add your tools virtual env to the globally available ones
pyenv global 3.7.5 tools# Now this works and you can start using poetry
poetry --version

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

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

poetry configsettings.virtualenvs.in-project true  

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

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

# Initialze a new project
poetry new dsexample
cd 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 module
poetry 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 production
poetry add --dev black=19.3b0# Assume we are inside the current toplevel dsexample folder
poetry run black .

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

类型纠正(Type-Correctness)

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

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

下面介绍mypy!

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

# mypy as a developmentdependency with --dev as we don't
# need it when it comes to production
poetry add --dev mypy# Assume we are inside the current toplevel dsexample folder
poetry 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 env
pyenv activate tools
pip install pre-commit# Leave the virtual env
pyenv deactivate# As we have already added the tool venv, it will work directly
pre-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 folder
pre-commit install

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

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

pre-commit run --all-files  

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

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/143387.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Archlinux Timeshift的系统备份与还原

服务器在滚挂或误删系统文件,timeshift系统备份与还原的情景: 安装 timeshif 1 yay -s timeshif 备份设置 选择快照类型 此处选择【RSYNC】 选择储存位置 每台设备安装分区不一样,大家安装实际情况选择,一般选择比较大的空间存储,并且最好是机械,这样不容易损坏 设置计…

Hashable/哈希协议, Arrays/数组 的使用

1. Hashable 模型实现哈希协议 1.1 实现 /// Identifiable struct MyCustomModel: Hashable{//let id UUID().uuidStringlet title: Stringfunc hash(into hasher: inout Hasher) {hasher.combine(title)} }/// 哈希协议: 唯一标识值 struct HashableBootcamp: View {// 每个…

xorm数据库操作之Join、Union

golang的数据库操作xorm使用起来非常方便,不用再自己写SQl语句,而且xorm自己给我们做了SQL防注入等操作,用起来既方便又安全。此次文章我不会记录xorm的基本操作,我值记录一些特殊用法问题,包括动态创建表单、基于xorm…

2023工博会 | 上海添力网络营销公司 | 助力工业品线上推广

2023年9月23日,为期五天的工博会正式落下帷幕。本届工博会不仅有数量,更加有质量,国内外企业纷纷拿出看家本领,围绕着“绿色低碳”、“数字化转型”、“数字经济”、“科技创新”、“智能制造”等主题进行推陈出新。 本次工博会也…

el-collapse 嵌套中 el-checkbox作为标题,选中复选框与el-tree联动

<el-drawertitle"应用授权":visible.sync"menuDrawer"><el-collapse accordion style"padding: 15px"><el-collapse-item v-for"item in platList"><template slot"title"><el-checkbox v-model…

高频工业RFID读写器的主要应用

随着通信技术的迅速发展&#xff0c;RFID的应用也逐渐广泛&#xff0c;产线、零售、身份识别、金融领域、门禁安全等各个方面都有RFID的身影。其中很多应用都是以高频技术应用为主&#xff0c;下面我们就跟大家一起来了解一下&#xff0c;高频工业RFID读写器的主要应用包括哪些…

BGP服务器租用价格表_腾讯云PK阿里云

BGP云服务器像阿里云和腾讯云均是BGP多线网络&#xff0c;速度更快延迟更低&#xff0c;阿里云BGP服务器2核2G3M带宽优惠价格108元一年起&#xff0c;腾讯云BGP服务器2核2G3M带宽95元一年起&#xff0c;阿腾云分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格表如下&…

对象数组合并和去重

数组去重: 普通字符串/数字数组去重: 1. 利用Set的特性 > new Set(arr) 2. for遍历, indexOf判断是否存在 3. 利用对象去重, 因为对象的key有唯一性 数组合并: 可以使用克隆(克隆, 深克隆的那些方法) 对象数组去重: for循环, find或者findIndex判断是否存在, 然后不存…

某瑞集团安全技术研发岗位面试

本文由掌控安全学院 - sbhglqy 投稿 一、自我介绍 阿吧阿吧&#xff0c;不多说 二、就ctf比赛经历方面提些问题 面试官&#xff1a;ctf打了多久了 我&#xff1a;两三年了。 面试官&#xff1a;得过什么奖项没有 我&#xff1a;本科的时候得过一个校一等奖。 面试官&#x…

路径依赖

今天聊会路径依赖&#xff0c;前两天看到一个老同事还在从事他十多年做的事&#xff08;软件行业里一个比较细分的领域&#xff09;&#xff0c;当初可完全是一个偶然的因素入了这行&#xff0c;不成想这一做就是十几年。他说“我只能干这个&#xff0c;其他也不会啊&#xff0…

服务网关Gateway_三大核心概念

路由(Route) 这是网关的基本构建块。它由一个ID&#xff0c;一个目标URI&#xff0c;一组断言和一组过滤器定义。如果断言为真&#xff0c;则路由匹配。 断言(predicate) 输入类型是一个ServerWebExchange。我们可以使用它来匹配来自HTTP请求的任何内容&#xff0c;例如head…

【小程序 - 基础】WXML、WXSS语法以及小程序的配置、网络数据请求_03

目录 一、WXML模板语法 1. 数据绑定 1.1 数据绑定的基本原则 1.2 在 data 中定义页面的数据 1.3 Mustache 语法的格式 1.4 Mustache 语法的应用场景 2. 事件绑定 2.1 什么是事件 2.2 小程序中常用的事件 2.3 事件对象的属性列表 2.4 target 和 currentTarget 的区别…

Excel·VBA日期时间转换提取正则表达式函数

标准日期转换 Function 标准日期(ByVal str$) As DateDim pat$, result$arr Array("(\d{4}).*?(\d{1,2}).*?(\d{1,2})", "(\d{4}).*?(\d{1}).*?(\d{1,2})")If Len(str) < 8 Then pat arr(1) Else pat arr(0)With CreateObject("vbscript.r…

【计算机网络】——应用层

// 图片取自王道 仅做交流学习 一、基本概念 应用层概述 协议是 网络层次模型 中多台主机之间 同层之间进行通信的规则。是一个水平概念 垂直空间上&#xff0c;向下屏蔽下层细节&#xff0c;向上提供服务接入&#xff0c;多台主机之间同层之间形成一条逻辑信道。 应用层的…

最新AI写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt应用+MJ以图生图+思维导图生成

一、智能创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&…

css实现四角圆边框

摘要&#xff1a; 做大屏的项目时&#xff0c;遇到很多地方要用到不同尺寸的盒子需要圆角的效果&#xff0c;所以不可能要求ui弄那么多图片的&#xff0c;并且那么多图片加载速度很慢的&#xff0c;比较臃肿&#xff0c;大屏要求的就是流畅&#xff0c;所以这用css加载很快的&a…

计算机网络第五节 网络层

一&#xff0c;网络引入的目的 1.网络层以下层次解决的问题&#xff0c;未解决的问题 从7层结构上看&#xff0c;网络层下是数据链路层 从4层结构上看&#xff0c;网络层下面是网络接口层 至少我们看到的网络层下面是以太网 以太网解决了什么问题&#xff1f; 答&#xff1…

【LeetCode热题100】--141.环形链表

141.环形链表 使用快慢指针&#xff1a; 定义两个指针&#xff0c;一快一慢&#xff0c;慢指针每次只移动一步&#xff0c;而快指针每次移动两步。初始时&#xff0c;慢指针在位置head&#xff0c;而快指针在位置head.next&#xff0c;这样&#xff0c;如果在移动的过程中&…

css实现Chrome标签栏

如图这是一个特殊的带有圆角的导航栏&#xff0c;实现这种效果并不难 这是我实现的效果&#xff1a; 淡一点的就是鼠标悬停的样式 以下是代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

Hugging News #0925: 一览近期的新功能发布

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…