原来我一直安装 Python 库的姿势都不对呀


Posted in Python onNovember 11, 2019

平常我都是直接执行 pip install 安装的第三方库,很多教程也是这么介绍的,一直以来我都认为这是标准的、正确的安装 Python 第三方库的姿势。直到我最近看到Python核心开发者Brett Cannon 写的一篇文章。

简单总结来说,他认为其实最正确的安装方式是使用 python-m pip 来执行 pip 命令,无论什么情况下均是如此。

他在文章里大致提出了以下几个建议:

  1. 建议用 python-m pip 安装三方库
  2. 务必使用虚拟环境,不要安装至系统 Python
  3. 建议用 pipx 独立安装工具
  4. 建议用 python-m venv 创建虚拟环境
  5. 可以将容器整体作为一个环境,跳过虚拟环境

我简单解释下每个建议背后的理由。

1. 建议用 python-m pip 安装三方库

理由是这样做,可以实现更加准确地控制库所安装的位置。

不少人的电脑里,会同时安装不同版本的 Python。少数极端的用户甚至会安装不同的小版本,如 3.7 和 3.7.4。这是直接用 pip的话,你自己可能都不清楚最终安装到了哪个版本的Python 下面。

python-m pip 命令,可以让你直接指定要安装到哪个版本。

2. 务必使用虚拟环境,不要安装至系统 Python

这个建议应该很多人都认同,在实践中也是这样执行的。如果不用虚拟环境隔离的话,系统版本的三方库会变得特别的庞杂,甚至出现系统依赖库的版本不合理,导致系统崩溃的严重问题。

3. 建议用 pipx 独立安装工具

如果你想尝试 black、mypy 等开发工具,可以考虑通过 pipx 将这些工具各自安装到独立的环境中,同时又能够直接在系统环境下调用终端的入口。

4. 建议用 python-m venv 创建虚拟环境

Brett 个人更倾向于使用 python-m venv 命令创建虚拟环境,理由和第一点建议相同,可以获得更大的控制权,精确指定所使用的版本。

当然,使用 virutalenv 也是一个非常普遍的方式。

5. 可以将容器整体作为一个环境,跳过虚拟环境

如果项目是容器化开发的,那么把每个容器当做成一个个独立的虚拟环境使用也是没有问题的。在容器里没有必要再单独去创建虚拟环境了。

当然前提是,你不要安装到系统自带的 Python 中。

总结

以上所述是小编给大家介绍的安装python库的正确姿势,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python批量修改文件后缀示例代码分享
Dec 24 Python
python的类变量和成员变量用法实例教程
Aug 25 Python
Python多线程和队列操作实例
Jun 21 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Python实现简单的用户交互方法详解
Sep 25 Python
Python中求对数方法总结
Mar 10 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
利用PyTorch实现VGG16教程
Jun 24 Python
python mock测试的示例
Oct 19 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
详解Python调用系统命令的六种方法
Jan 28 Python
Python帮你识破双11的套路
Nov 11 #Python
如何基于Python批量下载音乐
Nov 11 #Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 #Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 #Python
Python序列化与反序列化pickle用法实例
Nov 11 #Python
详解Python可视化神器Yellowbrick使用
Nov 11 #Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 #Python
You might like
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
PHP 面向对象实现代码
2009/11/11 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
浅析Node.js非对称加密方法
2018/01/29 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python 动态加载的实现方法
2017/12/22 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
学习和使用python的13个理由
2019/07/30 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
德国自行车商店:Tretwerk
2019/06/21 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
《桂花雨》教学反思
2014/04/12 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
Python学习之异常中的finally使用详解
2022/03/16 Python
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang