Python 效率提升技巧
副标题:超三成的python 初学者,倒在了这三个坑内
坊间流传着一句经典:“人生苦短,我用Python!”
python目前斩获的头衔有:挤掉java成为编程语言排行第二、增量最快、AI时代头牌语言,甚至已经入选北京山东等地的中小学教材,因为其简单易用,适用广泛,已经成为很多初学编程人的首选语言。
但由于Python的某些特有的历史原因,例如版本兼容问题等,导致在学习的过程中,总会遇到几个大坑,导致刚刚萌芽的学习热情就被无情浇灭。本篇主要讲解初学python过程中最常遇到的3个大坑:
- 版本兼容问题
- 依赖包无法下载安装问题
- 工程依赖环境问题
学习这几点,初学者不再倒在入门的门槛上,轻松入门;已入门的,可以帮您提高python开发使用和效率
坑一:Python 版本问题
Python 的版本问题一直是个广被吐槽的黑点,以至于有人调侃说:
Python 是世界上最好的两种语言!
对于初学者来说,版本间的存在语法差异,python2 和python3 的代码不兼容,导致初学python 的难度剧增,更令人抓狂的是对应的第三方依赖库也是如此
比如你有两个应用,但是X
应用需要用到 A
依赖包的版本1,而另一个Y
应用却需要 版本2,但是这两个版本却不兼容,升级了版本,X
就无法运行,不升级 Y
就没法用
或者,你工程用了A模块的最新版本,但是另一个项目却用了B模块,B模块却依赖的是A的较早模版,这种情况下模块B甚至都无法成功安装,尴尬哦
这种版本的冲突在python 学习和开发中十分常见,而python2 和python 3 的版本差异又加剧了这一问题
对于上述版本问题,可以试试 python 虚拟环境
解决方案:venv 虚拟环境
Python3.3以上的版本通过venv模块原生支持虚拟环境,venv模块提供了创建轻量级“虚拟环境”,实现与系统Python的隔离。好处有:
- 搭建独立的python运行环境,不与系统和其他项目产生冲突
- 有助于工程的依赖管理,有效防止依赖包的版本冲突
- 迁移和卸载方便
工程目录执行:
1 | 在当前目录下创建<venv_path>的文件夹,即在该文件夹内为虚拟了一套当前目录使用的python环境 |
启用虚拟环境
1 | macos or linux 等Posix标准平台 |
退出虚拟环境
1 | deactivate |
venv
仅仅支持python 3, 如果要同时使用 python2 和 python3 ,请使用 virtualenv
virtualenv 是目前最流行的 python 虚拟环境配置工具。它不仅同时支持 python2 和 python3,而且可以为每个虚拟环境指定 python 解释器,并选择不继承基础版本的包。
virtualenv 和 venv 操作类似,只是需要安装
pip install virtualenv
如果是新学Python,建议直接上Python3
坑二:依赖包安装下载慢如蜗牛
在使用python时,避免不了用pip下载一些依赖库,但下载的过程经常慢得令人发指,让初学python 的同学直接从入门升华到了放弃的边缘。
这是因为默认pip是使用Python官方的源,但是由于国外官方源经常被墙,导致不可以用。所以我们需要切换到国内的Python镜像源,从而解决Python库下载过慢和无法安装的烦恼。
解决方案:设置pip镜像仓库
pip 安装时指定源(一次性,临时)
1 | 在后面加上 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com |
永久配置源
通过设置pip的环境变量来改变pip源的下载地址
系统环境下pip.ini 的位置(没有可以新建)
1 | MacOSX/Linux/Unix: |
pip.ini 文件内容:
1 | [global] |
虚拟环境中,pip.ini存放的位置
1 | macos、linux 等Posix标准平台 |
这样不管在系统环境下,还是在虚拟环境下,都能直接到配置的镜像源下载依赖包了
国内源列表(推荐用阿里云的)
- 阿里云 http://mirrors.aliyun.com/pypi/simple/
- 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
- 豆瓣 (douban) http://pypi.douban.com/simple/
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
坑三:安装工程依赖靠报错
记得自己当初学python时,在网上找了一篇教程,一步一步跟着操作或者敲完代码,最后启动工程时,却提示这个依赖不存在,那个依赖不存在,只得依靠运行时报错信息了解工程还缺哪些依赖。
第二个就是自己做了一个项目,然后要部署到服务器上,却忘了自己在做项目的过程中安装过哪些依赖包了,部署过程烦的不得了,不得已在做后续项目时都要建一个备忘文档,用来记录自己安装过哪些依赖。
直到后来发现python 也是有工程依赖的解决方案
解决方案:依赖清单 requirement
python工程管理中的requirements 相当于java 中的maven,通过它很方便记录工程下所有依赖包及其精确的版本号,并且很容易在一个新环境下恢复工程所有的依赖安装,以便新环境迁移部署。
requirements 清单内容:
1 | pandas==0.25.3 |
生成 requirement清单有两种方式:
方式一:pip freeze > requirements.txt
生成依赖清单:
1 | pip freeze > requirements.txt |
方式二:pipreqs
pipreqs
属于三方工具包,需要 先通过pip 安装
1 | pip install pipreqs |
pipreqs
会扫描工程目录下所有python 文件,从中检索出所有工程依赖,从而生成依赖清单,具体命令:
1 | # 扫描当前目录,生成 requirements.txt 清单。--encoding=utf8 为了避免windows 下编码异常 |
这两种方式都可以在当前目录下生成依赖清单,区别在于:
使用
pip freeze
保存的是当前Python
环境下所有的类库,如果没有在虚拟环境下用,就会将系统所有的依赖放到清单内。所以常用于整个系统环境的迁移 或者 搭配虚拟环境使用使用
pipreqs
它会根据当前目录下的项目的依赖来导出三方类库,因此常用与项目的迁移中
恢复工程依赖
那么如何用 requirements.txt
来恢复工程依赖呢?只需要在工程目录下执行:
1 | pip install -r requirements.txt |
回顾
- 通过
venv 虚拟环境
能够解决python 及 依赖包的版本冲突问题 - 通过设置国内pip镜像仓库,解决pip 安装依赖包时乌龟般下载速度的问题
- 通过
工程依赖清单requirement
,解决工程依赖管理和工程迁移部署问题