同时安装py2和py3-安装多版本python
遇到问题和需求
我的电脑环境:先安装py2再安装py3,平时我工作中是使用python2,如何保证两个版本共存且让代码来选择要使用的版本。
遇到问题
在cmd中输入python,进入的是py2的环境,但是通过pip install模块是安装到了python3目录下
需求
工作中使用pytho2,在学习python新特性时,有个便捷的方法可以切换到python3。希望可以通过双击py文件来执行,而且可以区分不同的版本来执行
解决方案
安装python3时的环境变量
在安装python3时不要勾选添加安装目录到环境变量中,下面这几个都不要添加到环境变量的path中
C:\Python38
C:\Python38\Scripts
同时不要把这几个目录添加到环境变量的path中
C:\Users\zhaoqingqing01\AppData\Local\Programs\Python\Python38\
C:\Users\zhaoqingqing01\AppData\Local\Programs\Python\Python38\Scripts\
py脚本规范
在py脚本的第一行指定python的版本,记住要双击运行python脚本,而不要通过在cmd中调用 python xx.py来执行,因为python3没有添加到环境变量,在cmd中会以python2来执行
! python2
! python3
不要修改改python3目录下的python.exe的名字,否则脚本中指定的python3版本会找不到python.exe
加上这行之后对于只安装python3的环境也是不会出错的。
参考资料
参考资料:python2 和 python 3和多版本如何共存_KM (netease.com)
py.exe
在安装python3.8.10时会有一个选项py launcher,这个py launcher是什么呢?install global "py" launcher to make it easier to start python
这个py.exe程序安装到了C:\Windows\py.exe
注意:只有python3才有py.exe
- 在C:\Windows下面; 还有一个pyw.exe 是窗口版本
- py除了可以
py -2 xxx.py, 还可以py -3.5 xxx.py - 官方认为, py文件的默认打开方式应该是py.exe
通过py.exe来指定python版本
示例:
C:\Windows\System32>py -3
Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
C:\Users\zhaoqingqing01>py -2
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:19:08) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
pip.exe
安装目录下这三个pip的MD5都是一样的,说明是三个相同的文件

正确的方法为py2或py3单独安装库,参考文章:《为不同版本python安装pip的正确做法 - 赵青青 - 博客园 (cnblogs.com)》
py -2 -m pip install XXXX
py -3 -m pip install XXXX
#! python3 失效不识别
在我安装python2 x64版本之后,#! python3 这条指令就失效了,打印出来的sys.version为python2 x64
测试代码:
#! python3
# coding=utf-8
import sys
import os
print(sys.version)
os.system('pause')
#输出结果:2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)]
然后我把python2 x64的版本卸载后,.py文件的打开方式就丢失了,所以可以认为是它修改了.py的打开方式。
- 官方认为, py文件的默认打开方式应该是py.exe,完整路径:C:\Windows\py.exe
把py文件的打开方式修改为py.exe后一切都正常了,我是同时安装了python2和python3,然后查看py.exe的版本号是3.x
待验证
是否需要在C:\Windows\下放python.exe才能正常识别#!python2和#!python3?
这个exe的源码如下(编译为32位的C程序):
int main(int argc, char *argv[])
{
std::string s = "py ";
for (int i = 1; i < argc; ++i)
{
s += " ";
s += argv[i];
}
printf(s.c_str());
printf("\n");
system(s.c_str());
return 0;
}
同时安装py2和py3-安装多版本python的更多相关文章
- windows10上同时安装py2和py3的情况
2018-06-14 16:14:51 1.同时安装python2和python3的时候,pip只是其中一个版本,使用对应Python版本的pip时,在命令行分别输入如下命令: 查看不同Python ...
- anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5
anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5 @wp20181030 环境:ubuntu18.04, anaconda2, ubuntu系统下事先安装了pyt ...
- Anaconda多版本Python管理以及TensorFlow版本的选择安装
Anaconda是一个集成python及包管理的软件,记得最早使用时在2014年,那时候网上还没有什么资料,需要同时使用py2和py3的时候,当时的做法是同时安装Anaconda2和Anaconda3 ...
- anaconda 下多版本Python 安装说明
网上针对多版本的Python兼容安装的文章逐渐增多,都是大家在实践中总结的经验.本人的安装经过几次的反复实验还是觉得其中一种更为方便. 有人的安装方法是: 1. 先安装一个版本的python(一般先安 ...
- Python 基础之在ubuntu系统下安装双版本python
前言:随着python升级更新,新版本较于老版本功能点也有不同地方,作为一个初学者应该了解旧版本的规则,也要继续学习新版本的知识.为了能更好去学习python,我在ubuntu安装python2和py ...
- ubuntu下安装多版本Python
今天一不小心又把ubuntu系统给完坏了,因为我把python3卸载了,然后就...好了,不废话了,接下来就说一下如何在ubuntu下管理python的多个版本.我这里使用的是一个叫pyenv的Pyt ...
- <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装
期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...
- Windows2000安装Winform Clickonce提示升级系统版本的解决方案
Windows2000安装Winform Clickonce提示升级系统版本.只需要把所有应用的DLL的独立性设置为false就可以了.
- Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法
参考:Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法 Vs2012的下载地址: https://msdn.microsoft.com/en ...
随机推荐
- 5┃音视频直播系统之 WebRTC 中的协议UDP、TCP、RTP、RTCP详解
一.UDP/TCP 如果让你自己开发一套实时互动直播系统,在选择网络传输协议时,你会选择使用UDP协议还是TCP协议 假如使用 TCP 会怎样呢?在极端网络情况下,TCP 为了传输的可靠性,将会进行反 ...
- Linux-Mycat实现MySQL的读写分离
centos8 服务器共三台 client 10.0.0.88 mariadb-10.4.24 mycat-server 10.0.0.18 ...
- drools的类型声明(Type declarations)
一.背景 在我们编写drl规则的时候,有些时候需要自己声明一些类,用于辅助之后的规则运行,如果需要用到的类还需要在java中预先声明出来,这样就不灵活了,那么是否可以在drl文件中声明一个类呢?可以使 ...
- 【多线程】观测线程状态 getState()
观测线程状态 getState() Thread.State(查看JDK帮助文档) 线程状态.线程可以处于以下状态之一: [NEW] 尚未启动的线程处于此状态. [RUNNABLE] 在Java虚拟机 ...
- unity---脚本代码报错
同版本编辑器在不同VS版本下会报错问题解决 解决方法 报错情况 解决方法 打开Unity --->Preferences--->External Tools然后点击:Regenerate ...
- ArrayList常用Api分析及注意事项
数组(定长,有序的,随机访问).ArrayList是Java在数组的基础上进行衍生出来的Java里的一种数据结构,它在拥有数据的特性之外,增加了可变性 (动态数组). 属性 属性 备注 DEFAULT ...
- 每天一个 HTTP 状态码 101
101 Switching Protocols 当客户端的请求具有 Upgrade HTTP 首部,表示要求服务器切换到指定协议:此时服务器端就可以向客户端响应 101 Switching Proto ...
- 04C++核心编程(二-泛型编程)
Day08 笔记 1 函数模板 1.1 泛型编程 – 模板技术 特点:类型参数化 1.2 template< typename T > 告诉编译器后面紧跟着的函数或者类中出现T,不要报错, ...
- 16岁男生信息竞赛成瘾心理出现问题 妈妈:他竟说要AK我
16岁男生信息竞赛成瘾心理出现问题 -- 妈妈:他竟说要AK我 "我儿子最近快走火入魔了,医生,你救救他吧."40出头的林女士拉着儿子走进江苏省人民医院临床心理科.近几年,信息竞赛 ...
- MySQL之事务隔离级别和MVCC
事务隔离级别 事务并发可能出现的问题 脏写 事务之间对增删改互相影响 脏读 事务之间读取其他未提交事务的数据 不可重复读 一个事务在多次执行一个select读到的数据前后不相同.因为被别的未提交事务修 ...