原来我一直安装 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的web框架中中编写日志列表的教程
Apr 30 Python
Python多线程和队列操作实例
Jun 21 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
python3实现基于用户的协同过滤
May 31 Python
python os模块简单应用示例
May 23 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
Python 静态方法和类方法实例分析
Nov 21 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
教你怎么用Python生成九宫格照片
May 20 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高级OOP技术演示
2009/08/27 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
在Python中操作字典之update()方法的使用
2015/05/22 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
怎样使用Python脚本日志功能
2016/08/14 Python
python机器学习之随机森林(七)
2018/03/26 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
Python实现微信好友的数据分析
2019/12/16 Python
python计算二维矩形IOU实例
2020/01/18 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
Django数据统计功能count()的使用
2020/11/30 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
业务员岗位职责
2013/11/16 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
历史博物馆观后感
2015/06/05 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
MySQL普通表如何转换成分区表
2022/05/30 MySQL