Win 10 中使用 Python 碰到的奇怪現象

點擊上方“編程派”,選擇設爲“設爲星標

優質文章,第一時間送達!

作者:流光飛舞

來源:https://shuhari.dev/blog/2019/11/win10-store-python

最近在使用 Python 的時候發生了很奇怪的現象:從命令行執行 python.exe 並不會進入 REPL,似乎也沒有其他反應,然而稍等片刻,會看到系統彈出 Windows Store 頁面,並定位到 Python App 的詳情頁。

這個現象讓我很是迷惑了一下,還以爲是 Python 運行環境出了什麼狀況,但很快反應過來,從現象看,應該是 Windows 搞的鬼。

檢查一下路徑是否正常,果然:

\$ where python
C:\\Users\\yuhao\\AppData\\Local\\Microsoft\\WindowsApps\\python.exe

原理是系統自己搞了一個 Python.exe。如果從在資源管理器打開上述目錄的話,會看到這裏只有孤零零的幾個 .exe 文件,且圖標也不正常,並不是一個真正的、完整的 Python 運行環境。

那麼問題來了,Windows 搞這些沒有實際環境的 .exe 出來,用意何在?

從網上找到一些信息,原來從 Windows 10 2019 五月更新以來,微軟試圖把 Python 帶到 Windows,至於具體做法,則是把 Python3 放到了自家的商店裏面。而上面看到的 python.exe 是一個“假的” Python,它的唯一作用在於當系統沒有找到 Python 的時候,自動跳轉到微軟商店去讓我們下載。

以下是微軟團隊給出的說法:Who put Python in the Windows 10 May 2019 Update?

可能是擔心這個新的功能導致一些兼容性方面的結果,微軟又在系統設置裏面添加了一個比較隱晦的功能。比起在層層疊疊的設置界面裏找到它,更簡單的方法是直接輸入 app exec

這樣會打開設置的“應用程序別名”界面。這裏我們會看到系統認爲 python.exepython3.exe 都只是安裝程序的別稱,不過我們也可以選擇把它們關閉。這樣當我們再運行 python 的時候,就會顯示“找不到程序”的標準提示。實際上,Windows 是把上述 .exe 文件偷偷備份到其他地方了。

很多程序員(包括我)很可能都是按照標準的方式從官方下載安裝 Python 執行文件。如果在安裝過程中選擇了“添加到系統環境變量”的話,那麼標準 Python 會註冊到系統 PATH 變量,而前面所述的 WindowsApps 目錄則是 Windows 添加到用戶 PATH 變量的。按照 Windows 系統的規則,PATH 環境變量是系統設置先於用戶設置,所以如果安裝了標準版 Python 的話,系統應該首先找到的是它,而不是應用商店版的 Python。後來我發現,之所以我的機器會出現上述問題,是因爲系統設置有一點語法錯誤,修正以後再次測試,結果就正常了。

到此,我們已經理解了 Windows 自帶的 Python 是怎麼回事。微軟這樣做的初衷,應該是希望普通用戶能更方便地用上 Python,這個想法無可厚非,但放到 Windows 應用商店這個設計思路是否合理,我還是有一些懷疑的。畢竟微軟應用商店一直以來名聲並不算太好,內容少、功能欠缺、速度慢,時不時發生一些惱人的小問題(比如 不知所云的 0x8000xxxx 錯誤)。而“應用程序別名”這個功能到底是解決了問題還是帶來更多的困惑,我也持保留意見。

當我在網上查找關於該問題的信息時,也發現有其他用戶同樣受到該問題的困擾,比如:

  • [Bug] Don't find python library from WindowsApps dir

  • Microsoft Store installed python (3.7 - Windows 10) based virtualenvs cannot access pyd DLLs

目前,在 Windows 上面安裝 Python 已經有很多不同的方式:

  • 通過官方網站下載安裝;

  • 通過 Anaconda 集成軟件包;

  • Visual Studio 一起安裝;

  • 通過 chocolatey 之類的第三方包管理;

  • 通過 WSL 安裝 Linux 版 Python;

  • 通過 Windows Store 安裝;

說實話,我認爲太多不同的來源渠道會讓環境問題變得更復雜,增加出錯的可能,並且容易迷惑初學者。對於大多數程序員來說,建議大家還是按照最基本的方式,從官方下載並安裝 Python。

回覆下方「關鍵詞」,獲取優質資源

回覆關鍵詞「 pybook03」,立即獲取主頁君與小夥伴一起翻譯的《Think Python 2e》電子版
回覆關鍵詞「入門資料」,立即獲取主頁君整理的 10 本 Python 入門書的電子版
回覆關鍵詞「m」,立即獲取Python精選優質文章合集
回覆關鍵詞「book 數字」,將數字替換成 0 及以上數字,有驚喜好禮哦~
題圖:pexels,CC0 授權。

好文章,我在看❤️
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章