原来我一直安装 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中的文件和目录操作实现代码
Mar 13 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
python实现同时给多个变量赋值的方法
Apr 30 Python
Python制作爬虫抓取美女图
Jan 20 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
对python sklearn one-hot编码详解
Jul 10 Python
Python学习笔记之While循环用法分析
Aug 14 Python
python读取指定字节长度的文本方法
Aug 27 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
详解Flask前后端分离项目案例
Jul 24 Python
python 下载文件的多种方法汇总
Nov 17 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
第十一节--重载
2006/11/16 PHP
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP链表操作简单示例
2016/10/15 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
python 日志增量抓取实现方法
2018/04/28 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python做反被爬保护的方法
2019/07/01 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
Python 定义只读属性的实现方式
2020/03/05 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
介绍下Java的输入输出流
2014/01/22 面试题
毕业生找工作推荐信
2013/11/21 职场文书
运动会广播稿100字
2014/09/14 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
中学生自我评价范文
2015/03/03 职场文书
整改通知书格式
2015/04/22 职场文书
《绝招》教学反思
2016/02/20 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书