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

2022-07-26 06:01:21

遇到問題和需求

我的電腦環境:先安裝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;
}