原来我一直安装 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 相关文章推荐
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
理解Python中的With语句
Mar 18 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
padas 生成excel 增加sheet表的实例
Dec 11 Python
python实现三次样条插值
Dec 17 Python
python取余运算符知识点详解
Jun 27 Python
python中调试或排错的五种方法示例
Sep 12 Python
python的等深分箱实例
Nov 22 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
python实现堆排序的实例讲解
Feb 21 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 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
详细介绍PHP应用提速面面观
2006/10/09 PHP
PHP获取url的函数代码
2011/08/02 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
Python整数对象实现原理详解
2019/07/01 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
英国女装网上商店:I Saw It First
2018/10/18 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
大学生毕业的自我评价分享
2014/01/02 职场文书
小学数学教学反思
2014/02/02 职场文书
广告业务员岗位职责
2014/02/06 职场文书
思想品德课教学反思
2014/02/10 职场文书
药店主任岗位责任制
2014/02/10 职场文书
单位承诺书格式
2014/05/21 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python