同時安裝py2和py3-安裝多版本python

  • 2022 年 7 月 25 日
  • 筆記

遇到問題和需求

我的電腦環境:先安裝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都是一樣的,說明是三個相同的文件

image-20210908101523089

正確的方法為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;
}