多个版本的python共存时使用pip的正确做法


Posted in Python onOctober 26, 2020

想学习Python3,但是暂时又离不开Python2。在Windows上如何让它们共存呢?

目前国内网站经常会让大家把其中一个python.exe改个名字(嗯,我也这样讲过,在此纠正一下),这样区分开两个可执行文件的名字,但是这样做有一个重大的隐患,就是修改了名字的那个python对应的pip将无法使用。

官方的解法是什么?

事实上这个问题几年以前Python社区就给出了官方解决方案,只不过国内一直没有注意到罢了。

我们在安装Python3(>=3.3)时,Python的安装包实际上在系统中安装了一个启动器py.exe,默认放置在文件夹C:\Windows\下面。这个启动器允许我们指定使用Python2还是Python3来运行代码(当然前提是你已经成功安装了Python2和Python3)。

如果你有一个Python文件叫 hello.py,那么你可以这样用Python2运行它

py -2 hello.py

类似的,如果你想用Python3运行它,就这样

py -3 hello.py

每次运行都要加入参数-2/-3还是比较麻烦,所以py.exe这个启动器允许你在代码中加入说明,表明这个文件应该是由python2解释运行,还是由python3解释运行。说明的方法是在代码文件的最开始加入一行

#! python2

或者

#! python3

分别表示该代码文件使用Python2或者Python3解释运行。这样,运行的时候你的命令就可以简化为

py hello.py

使用pip

当Python2和Python3同时存在于windows上时,它们对应的pip都叫pip.exe,所以不能够直接使用 pip install 命令来安装软件包。而是要使用启动器py.exe来指定pip的版本。命令如下:

py -2 -m pip install XXXX

-2 还是表示使用 Python2,-m pip 表示运行 pip 模块,也就是运行pip命令了。如果是为Python3安装软件,那么命令类似的变成

py -3 -m pip install XXXX

#! python2 和 # coding: utf-8 哪个写在前面?

对于Python2用户还有另外一个困惑,Python2要在代码文件顶部增加一行说明,才能够在代码中使用中文。如果指明使用的Python版本也需要在文件顶部增加一行,那哪一行应该放在第一行呢?

#! python2 需要放在第一行,编码说明可以放在第二行。所以文件开头应该类似于:

#! python2
# coding: utf-8

有了这些技巧,Python2和Python3就可以愉快地在一起玩耍了~

以上就是多版本python共存时使用pip的正确做法的详细内容,更多关于python pip的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Python读取指定日期邮件的实例
Feb 01 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
python 寻找离散序列极值点的方法
Jul 10 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
python turtle 绘制太极图的实例
Dec 18 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
python使用建议与技巧分享(一)
Aug 17 Python
python 实现ping测试延迟的两种方法
Dec 10 Python
python爬虫selenium模块详解
Mar 30 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 #Python
如何使用Pytorch搭建模型
Oct 26 #Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 #Python
python递归函数用法详解
Oct 26 #Python
Python实现LR1文法的完整实例代码
Oct 25 #Python
Python操作word文档插入图片和表格的实例演示
Oct 25 #Python
python时间time模块处理大全
Oct 25 #Python
You might like
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python将string转换到float的实例方法
2019/07/29 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
金蝶的一道SQL笔试题
2012/12/18 面试题
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
中医专业职业生涯规划书范文
2014/01/04 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
专家推荐信范文
2015/03/26 职场文书
新课程改革心得体会
2016/01/22 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis