原来我一直安装 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交换变量
Sep 06 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python使用itchat实现手机控制电脑
Feb 22 Python
python爬取微信公众号文章
Aug 31 Python
Python 最大概率法进行汉语切分的方法
Dec 14 Python
详解Python3序列赋值、序列解包
May 14 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
python requests使用socks5的例子
Jul 25 Python
Python实现生成密码字典的方法示例
Sep 02 Python
python 内置函数汇总详解
Sep 16 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 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读取IMAP邮件
2006/10/09 PHP
深入分析PHP引用(&)
2014/09/04 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
python显示生日是星期几的方法
2015/05/27 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python内存读写操作示例
2018/07/18 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
经典c++面试题三
2015/07/08 面试题
仓库规划计划书
2014/04/28 职场文书
外贸业务员求职信
2014/06/16 职场文书
工会工作先进事迹
2014/08/18 职场文书
红旗渠导游词
2015/02/09 职场文书
骨干教师个人总结
2015/02/11 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记