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

来源:https://www.cnblogs.com/zhaoqingqing/archive/2022/07/25/16518839.html
-Advertisement-
Play Games

遇到問題和需求 我的電腦環境:先安裝py2再安裝py3,平時我工作中是使用python2,如何保證兩個版本共存且讓代碼來選擇要使用的版本。 遇到問題 在cmd中輸入python,進入的是py2的環境,但是通過pip install模塊是安裝到了python3目錄下 需求 工作中使用pytho2,在學 ...


遇到問題和需求

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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 近期工作有涉及到數字大屏的需求,於是利用業餘時間,結合 Three.js 和 CSS實現賽博朋克2077風格視覺效果 實現炫酷 3D 數字地球大屏頁面。頁面使用 React + Three.js + Echarts + stylus 技術棧,本文涉及到的主要知識點包括:THREE.Spherical... ...
  • JavaScript進階內容——jQuery 我們在前面的文章中已經掌握了JavaScript的全部內容,現在讓我們瞭解一下JavaScript庫 這篇文章主要是為了為大家大致講解JavaScript庫以及使用方法,本篇不會完全講解jQuery的全部語法 如果希望完全掌握,可以參考網站jQuery ...
  • 1.創建虛擬環境 conda create --name yourEnv python=3.6 --name:也可以縮寫為 【-n】 yourEnv:是新創建的虛擬環境的名字,創建完,可以裝anaconda的目錄下找到envs/環境名 目錄 python=3.6:是python的版本號。也可以指定為 ...
  • JavaWeb 多個Servlet整合優化 由於一個Servlet只能接收一個地址的http請求,如果系統複雜度提高,就會有很多Servlet類。例如,對銷售系統來說,可能會有OederInsertServlet, OrderUpdateServlet, OrderDeleteSerlvet, Or ...
  • Spring Data JPA是Spring Data的子模塊。使用Spring Data,使得基於“repositories”概念的JPA實現更簡單和容易。Spring Data JPA的目標是大大簡化數據訪問層代碼的編碼。作為使用者,我們只需要編寫自己的repository介面,介面中包含一些個 ...
  • python3.9安裝pyqt,並設置pycharm 前言 這個學期的暑假實訓需要使用pyqt開發gui界面,然後我的python不知道發生了什麼,安裝總是爆出各種奇怪的錯誤,安裝完後,開發和運行的過程中也發生了很多的離奇的問題,我浪費了很多的時間在解決各種報錯上,項目進度被耽誤了許多,幸運的是後來 ...
  • Java面向對象(八) 二十四、abstract 關鍵字 abstract 可以用來修飾的結構:類、方法。 abstract 修飾類:抽象類。 此類不能實例化。 抽象類中一定有構造器,便於子類實例化時調用。(涉及:子類對象實例化的全過程) 開發中,都會提供抽象類的子類,讓子類對象實例化,完成相關的操 ...
  • 上一講【RocketMQ】消息的拉取 消息消費 當RocketMQ進行消息消費的時候,是通過ConsumeMessageConcurrentlyService的submitConsumeRequest方法,將消息提交到線程池中進行消費,具體的處理邏輯如下: 如果本次消息的個數小於等於批量消費的大小c ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...