多个版本的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的源码浅要剖析Python的内存管理
Apr 16 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
对pandas处理json数据的方法详解
Feb 08 Python
Python3之手动创建迭代器的实例代码
May 22 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
Python使用贪婪算法解决问题
Oct 22 Python
python二维键值数组生成转json的例子
Dec 06 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
Python3 pickle对象串行化代码实例解析
Mar 23 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面向对象全攻略 (九)访问类型
2009/09/30 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
js脚本实现数据去重
2014/11/27 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python实现简单登录验证
2016/04/13 Python
python实现批量图片格式转换
2020/06/16 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
举例说明类变量和实例变量的区别
2016/06/30 面试题
生物学学生自我评价
2014/01/17 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
故宫的导游词
2015/01/31 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书