原来我一直安装 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程序实例(通讯录)
Nov 29 Python
python实现ipsec开权限实例
Nov 11 Python
介绍Python的Django框架中的QuerySets
Apr 20 Python
在Django中创建动态视图的教程
Jul 15 Python
Python logging模块用法示例
Aug 28 Python
Python从函数参数类型引出元组实例分析
May 28 Python
Tensorflow 多线程设置方式
Feb 06 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
Python安装whl文件过程图解
Feb 18 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
python爬虫selenium模块详解
Mar 30 Python
python中os.path.join()函数实例用法
May 26 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设计模式 Bridge (桥接模式)
2011/06/26 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
Python如何给你的程序做性能测试
2020/07/29 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
商务日语专业毕业生求职信
2013/10/26 职场文书
银行类自荐信
2014/02/04 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
公司活动总结范文
2014/07/01 职场文书
支部书记四风对照材料
2014/08/28 职场文书
经理岗位职责范本
2015/04/15 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
《夸父追日》教学反思
2016/02/20 职场文书