遇到问题和需求

我的电脑环境:先安装py2再安装py3,平时我工作中是使用python2,如何保证两个版本共存且让代码来选择要使用的版本。

遇到问题

在cmd中输入python,进入的是py2的环境,但是通过pip install模块是安装到了python3目录下

需求

工作中使用pytho2,在学习python新特性时,有个便捷的方法可以切换到python3。希望可以通过双击py文件来执行,而且可以区分不同的版本来执行

解决方案

安装python3时的环境变量

在安装python3时不要勾选添加安装目录到环境变量中,下面这几个都不要添加到环境变量的path中

  1. C:\Python38

  2. C:\Python38\Scripts

同时不要把这几个目录添加到环境变量的path中

  1. C:\Users\zhaoqingqing01\AppData\Local\Programs\Python\Python38\

  2. 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的更多相关文章

  1. windows10上同时安装py2和py3的情况

    2018-06-14  16:14:51 1.同时安装python2和python3的时候,pip只是其中一个版本,使用对应Python版本的pip时,在命令行分别输入如下命令: 查看不同Python ...

  2. anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5

    anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5 @wp20181030 环境:ubuntu18.04, anaconda2, ubuntu系统下事先安装了pyt ...

  3. Anaconda多版本Python管理以及TensorFlow版本的选择安装

    Anaconda是一个集成python及包管理的软件,记得最早使用时在2014年,那时候网上还没有什么资料,需要同时使用py2和py3的时候,当时的做法是同时安装Anaconda2和Anaconda3 ...

  4. anaconda 下多版本Python 安装说明

    网上针对多版本的Python兼容安装的文章逐渐增多,都是大家在实践中总结的经验.本人的安装经过几次的反复实验还是觉得其中一种更为方便. 有人的安装方法是: 1. 先安装一个版本的python(一般先安 ...

  5. Python 基础之在ubuntu系统下安装双版本python

    前言:随着python升级更新,新版本较于老版本功能点也有不同地方,作为一个初学者应该了解旧版本的规则,也要继续学习新版本的知识.为了能更好去学习python,我在ubuntu安装python2和py ...

  6. ubuntu下安装多版本Python

    今天一不小心又把ubuntu系统给完坏了,因为我把python3卸载了,然后就...好了,不废话了,接下来就说一下如何在ubuntu下管理python的多个版本.我这里使用的是一个叫pyenv的Pyt ...

  7. <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  8. Windows2000安装Winform Clickonce提示升级系统版本的解决方案

    Windows2000安装Winform Clickonce提示升级系统版本.只需要把所有应用的DLL的独立性设置为false就可以了.

  9. Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法

    参考:Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法 Vs2012的下载地址: https://msdn.microsoft.com/en ...

随机推荐

  1. 定时 ——setTimeout | setInterval

    使用场景,setTimeout 只调用一次,setInterval 会重复调用,直到清除或重载. <div id="countDown"></div> &l ...

  2. 【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"

    问题描述 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connecti ...

  3. 高危!Fastjson反序列化远程代码执行漏洞风险通告,请尽快升级

    据国家网络与信息安全信息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞.攻击者可利用上述漏洞实施任意文件写入.服务端请求伪造等攻击行为,造成服务器权限被窃取.敏感信 ...

  4. 如何为Java面试准备项目经验

    1 提出问题 应届生朋友或Java程序员在找Java方面的工作时,一定会需要准备Java项目经验,但事实上不少求职者,是没有项目经验,或者只具有开源社区等的学习项目经验,这样的话,就很有可能在面试时无 ...

  5. C# 类继承中的私有字段都去了哪里?

    最近在看 C++ 类继承中的字段内存布局,我就很好奇 C# 中的继承链那些 private 字段都哪里去了? 在内存中是如何布局的,毕竟在子类中是无法访问的. 一:举例说明 为了方便讲述,先上一个例子 ...

  6. 《C Primer Plus》第六版笔记--4~6章

    目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...

  7. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

  8. 苹果宣布 2022 年 Apple 设计大奖得主

    Apple 今日举办了年度 Apple 设计大奖颁奖仪式,表彰 12 款出类拔萃的 app 与游戏佳作.今年的获奖者包括来自全球各地的开发者.他们通过 app 呈现锐意创新.别出心裁的优美设计体验,以 ...

  9. 为什么 SQL 语句使用了索引,但却还是慢查询?

    一.索引与慢查询 聊一聊索引和慢查询,经常遇到的一个问题:一个SQL语句使用了索引,为什么还是会记录到慢查询日志之中? 为了说明,创建一个表t,该表3个字段,一个主键索引,一个普通索引 CREATE ...

  10. E104-BT01超低功耗蓝牙模块BLE4.0协议的片载系统解决方案

    1.E104-BT01简介 E104-BT01 是亿佰特设计生产的一款小体积的蓝牙模块,贴片型(引脚间距 1.27mm),自带高性能 PCB 板载天线.支持 BluetoothV4.0 标准,简单配置 ...