原来我一直安装 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 11 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
PyQt5固定窗口大小的方法
Jun 18 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
详解Python 最短匹配模式
Jul 29 Python
Python实现简单的2048小游戏
Mar 01 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 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的switch判断语句的“高级”用法详解
2014/10/01 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
javascript中的this详解
2014/12/08 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
webpack引入eslint配置详解
2018/01/22 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
python开发之文件操作用法实例
2015/11/13 Python
python微信公众号开发简单流程
2018/03/23 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
Python基于locals返回作用域字典
2020/10/17 Python
几个常见的消息中间件(MOM)
2014/01/08 面试题
建筑工程质量通病防治方案
2014/06/08 职场文书
班级读书活动总结
2014/06/30 职场文书
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
SQLServer常见数学函数梳理总结
2022/08/05 MySQL