Python效率提升技巧

Python效率提升技巧

Python 效率提升技巧

副标题:超三成的python 初学者,倒在了这三个坑内

坊间流传着一句经典:“人生苦短,我用Python!”

python目前斩获的头衔有:挤掉java成为编程语言排行第二、增量最快、AI时代头牌语言,甚至已经入选北京山东等地的中小学教材,因为其简单易用,适用广泛,已经成为很多初学编程人的首选语言。

但由于Python的某些特有的历史原因,例如版本兼容问题等,导致在学习的过程中,总会遇到几个大坑,导致刚刚萌芽的学习热情就被无情浇灭。本篇主要讲解初学python过程中最常遇到的3个大坑:

  1. 版本兼容问题
  2. 依赖包无法下载安装问题
  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的隔离。好处有:

  1. 搭建独立的python运行环境,不与系统和其他项目产生冲突
  2. 有助于工程的依赖管理,有效防止依赖包的版本冲突
  3. 迁移和卸载方便

工程目录执行:

1
2
# 在当前目录下创建<venv_path>的文件夹,即在该文件夹内为虚拟了一套当前目录使用的python环境
python3 -m venv <venv_path>

启用虚拟环境

1
2
3
4
5
6
#macos or linux 等Posix标准平台
source <venv_path>/bin/activate
#windows cmd
C:> <venv_path>/Scripts/activate.bat
#Windows PowerShell
PS C:> <venv_path>/Scripts/Activate.ps1

退出虚拟环境

l
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
2
# 在后面加上 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install xxx -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

永久配置源

通过设置pip的环境变量来改变pip源的下载地址

系统环境下pip.ini 的位置(没有可以新建)

1
2
3
4
5
6
# MacOSX/Linux/Unix:
~/.pip/pip.ini
# windows
%HOMEPATH%\pip\pip.ini
# C:\Documents and Settings\All Users\Application Data\PyPA\pip\pip.conf (Windows XP)
# C:\ProgramData\PyPA\pip\pip.conf (Windows 7及以后)

pip.ini 文件内容:

1
2
3
4
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

虚拟环境中,pip.ini存放的位置

1
2
3
4
#macos、linux 等Posix标准平台
<venv_path>/bin/
#windows
<venv_path>/Scripts/

这样不管在系统环境下,还是在虚拟环境下,都能直接到配置的镜像源下载依赖包了

国内源列表(推荐用阿里云的)

坑三:安装工程依赖靠报错

记得自己当初学python时,在网上找了一篇教程,一步一步跟着操作或者敲完代码,最后启动工程时,却提示这个依赖不存在,那个依赖不存在,只得依靠运行时报错信息了解工程还缺哪些依赖。

第二个就是自己做了一个项目,然后要部署到服务器上,却忘了自己在做项目的过程中安装过哪些依赖包了,部署过程烦的不得了,不得已在做后续项目时都要建一个备忘文档,用来记录自己安装过哪些依赖。

直到后来发现python 也是有工程依赖的解决方案

解决方案:依赖清单 requirement

python工程管理中的requirements 相当于java 中的maven,通过它很方便记录工程下所有依赖包及其精确的版本号,并且很容易在一个新环境下恢复工程所有的依赖安装,以便新环境迁移部署。

requirements 清单内容:

1
2
3
4
5
pandas==0.25.3
numpy==1.14.1
apscheduler==3.6.3
beautifulsoup4==4.8.1
lxml==4.4.2

生成 requirement清单有两种方式:

方式一:pip freeze > requirements.txt

生成依赖清单:

1
pip freeze > requirements.txt

方式二:pipreqs

pipreqs 属于三方工具包,需要 先通过pip 安装

1
pip install pipreqs

pipreqs 会扫描工程目录下所有python 文件,从中检索出所有工程依赖,从而生成依赖清单,具体命令:

1
2
# 扫描当前目录,生成 requirements.txt 清单。--encoding=utf8 为了避免windows 下编码异常
pipreqs ./ --encoding=utf8

这两种方式都可以在当前目录下生成依赖清单,区别在于:

  • 使用pip freeze保存的是当前Python环境下所有的类库,如果没有在虚拟环境下用,就会将系统所有的依赖放到清单内。所以常用于整个系统环境的迁移 或者 搭配虚拟环境使用

  • 使用pipreqs它会根据当前目录下的项目的依赖来导出三方类库,因此常用与项目的迁移中

恢复工程依赖

那么如何用 requirements.txt来恢复工程依赖呢?只需要在工程目录下执行:

1
pip install -r requirements.txt

回顾

  1. 通过venv 虚拟环境 能够解决python 及 依赖包的版本冲突问题
  2. 通过设置国内pip镜像仓库,解决pip 安装依赖包时乌龟般下载速度的问题
  3. 通过工程依赖清单requirement,解决工程依赖管理和工程迁移部署问题

 

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×