多个版本的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笔记(2)
Oct 24 Python
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 Python
python常规方法实现数组的全排列
Mar 17 Python
Python中的默认参数实例分析
Jan 29 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
python hough变换检测直线的实现方法
Jul 12 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
使用python实现多维数据降维操作
Feb 24 Python
通俗讲解python 装饰器
Sep 07 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
python代码实现图书管理系统
Nov 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 GD绘制24小时柱状图
2008/06/28 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
smarty中post用法实例
2014/11/28 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
JSON取值前判断
2014/12/23 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
django框架ModelForm组件用法详解
2019/12/11 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
毕业生幼师求职自荐信
2013/10/01 职场文书
小学少先队活动方案
2014/02/18 职场文书
委托书格式
2014/08/01 职场文书
婚前财产协议书范本
2014/10/19 职场文书
社区敬老月活动总结
2015/05/07 职场文书
实习证明模板
2015/06/16 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python