原来我一直安装 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 列表list使用介绍
Nov 30 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
python3实现磁盘空间监控
Jun 21 Python
Python GUI布局尺寸适配方法
Oct 11 Python
python 字符串只保留汉字的方法
Nov 16 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
python与mysql数据库交互的实现
Jan 06 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
分享一个python的aes加密代码
Dec 22 Python
Python实现微信表情包炸群功能
Jan 28 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php判断linux下程序问题实例
2015/07/09 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
JavaScript 注册事件代码
2011/01/27 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
使用js画图之饼图
2015/01/12 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
json的使用小结
2016/06/08 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python Socket使用实例
2017/12/18 Python
python实现求最长回文子串长度
2018/01/22 Python
python的pip安装以及使用教程
2018/09/18 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
最新茶叶店创业计划书
2014/01/14 职场文书
企业文明单位申报材料
2014/05/16 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python