前言

許多人學習Python的經歷可能很相似,寫程式沒有問題,最後卻被各種環境困擾。

不論你是Python小白,還是學習Python有一段時間了。都可以認真的看一下ヾ(≧▽≦*)o

這篇文章讓你對Anaconda Pycharm理解更透徹。或許會有新的發現哦!

小故事

王二喜,男,性別不詳。程式設計師一個,頭髮一打。

"這年頭多會一門語言就是多會一門手藝,技多不壓身" 王二喜摸了摸自己未來的口袋,有了學習python的心思。

去Python的官網下載,安裝。出於程式設計師天生對於事物的控制感,王二喜打開了Python的安裝路徑。一個python.exe 和 pythonw.exe(IDLE 的一個組成部分),更復雜的路徑裡還有pip.exe。王二喜摸了摸眼鏡說:“結構清晰,檔案精簡”。轉身便投入到語法的海洋中去,領會其中的水深火熱。一句語法,一份力量。

就這樣,簡簡單單。幾天過去了...

王二喜很喜歡使用原生的IDLE。 這裡可以方便的測試各種Python語法。這期間命令列裡輸入python pip ,誤打誤撞的學習的過程中也安裝了許多的庫檔案,方便了自己的程式設計。

天氣晴朗,昨夜剛下了一場雨。

王二喜坐在電腦面前看著一篇博文《Python AI 手寫數字識別》,什麼神經網路,資料集,模型。所有的程式碼竟然不到100行。王二喜立刻照著程式碼,自己實現了一下。不錯,程式可以執行,可是很多關於 Deep Learning 的概念王二喜並不是很懂。王二喜決定找個教程學一學。教程A Anaconda。教程B Anaconda。教程C Anaconda。世界就是這麼迴圈往復,學習永不停止。

Anaconda 科學計算,方便包管理。王二喜根據一些教學視訊,安裝了下來。一個良好的環境是心情美麗開發的起點。

**對於安裝成功後的測試中,王二喜在命令列輸入Python,發現出來的並不是的老相好原生python。而是新上任的Anaconda裡的Python。

原來的pip也不可以使用了。王二喜大驚失色:“不會我原來的程式都不能運行了把。”

Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation Type "help", "copyright", "credits" or "license" for more information.
>>>123
123
>>>exit()

王二喜感覺身體有點麻,不是全麻的那種,因為他還有部分感覺。

還好這場面這幾年來見過不少”大場面“,原生的Python IDLE 是可以繼續使用的。王二喜立刻調整了心態。身體的麻感也漸漸消失了...接著進行了Anaconda的探索。

電腦裡出現了很多最近新增,王二喜點了一下Jupyter,出現一個網址,點進去發現很不錯。那Spyder 又是什麼呢。點選了半天,發現並不可以使用 打不開的。王二喜並不清楚來自遠古的冰河世紀的麻感,漸漸的,漸漸的,向他圍攏了來...

點選Navigator,原來圖形介面在這裡啊,launch一下jupyter,這東西也不動

建立一個新環境,只是走進度條,最後沒有結果

”我這安裝了一個什麼東西?“王二喜在網上開始了漫漫的求解之路,此去山長水遠,少小離家老大回。為什麼檢視介面不可以執行Jupyter Spyder。這個問題他一輩子都沒有解決,不斷的試錯加深了他的麻感....

王二喜對Anaconda並不感冒,編寫程式還是喜歡使用原來的IDLE。就這樣又編了一段時間。

直到剛開始要接觸一些大的專案用到Pycharm。

初秋的夜,天氣已然微涼。王二喜感到嘴脣發麻,因為他喜歡白色的烈酒搭配紅色花椒粒。風很冷,這酒卻是暖暖的。王二喜開啟電腦,開始今天的學習之旅。

正常安裝Pycharm後,開始建立專案,什 venv 什麼interpreter 為什麼要選擇interpreter?王二喜一臉疑惑。沒有答案並且腿麻了。

現在,王二喜開始接觸到虛擬環境了。知道在虛擬環境中安裝或者刪除的包,對於真正的Python全域性來說並不影響。而且一個新的虛擬環境只有三個包,很乾淨。

王二喜興奮的按照教程創建出了自己的虛擬環境。

interpreter是直譯器。二喜把自己原生的python.exe 放了上去。

建立成功,但是爆出了一個錯誤

Invalid Python SDK
cannot set a python SDK at Python 3.10(PythonProject)(F:\Code\PythonProject\venv\Scripts\python.exe)
The SDK seems invalid

二喜心裡一驚同時屁股麻了,這是什麼東西?順手點選了OK。這事兒也就過去了。樣例程式也可以執行。

迫不及待的試一試,找到了可以檢視包的位置,二喜又一次瞪眼了,哪裡有之前的說的簡單的三個包啊,這**是把咱老Python的包給偷過來了了啊,坑爹啊。(瞪眼)

二喜站在哪裡傻傻的說不出話來。整個上半身頓時麻感就湧上來。

王二喜挺住啊!

有沒有可能已經是虛擬環境了,與外界隔離了,只不過初始的包庫是在原來的基礎之上。二喜對它還是有期待的。

二喜在包列表裡找了個不那麼重要的包,像抓一隻即將離開人世的小乳豬,他叫h5py。

開啟原來的IDLE,import h5py print(h5py)。h5py高興的不得了,他輸出了自己的資訊。轉瞬二喜又到了pycharm裡解除安裝了h5py....

這畢竟也是第一次在pycharm裡解除安裝包,二喜還有點小興奮。

二喜很喜歡這個虛擬環境的功能,對於這種隔離,二喜vmware裡已經嚐到不少甜頭。

開啟原來的IDLE

import h5py
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import h5py
ModuleNotFoundError: No module named 'h5py'

多天的深夜程式編寫,一直報錯的專案環境,小豬豬的離奇死亡....

這一切的一切...

二喜胸口發悶。突然!!!世界一片漆黑,二喜再也沒有忍住,麻倒在地不省人世。嘴裡唸叨著我的h5py小豬豬啊,嗚嗚嗚。

誰也不知道二喜與h5py的深厚感情....

看到這裡很多同志都想起了當年了吧(~ ̄▽ ̄)~

一些拙見

我們想要一個Python環境。只需要安裝Anaconda + Pycharm即可

原生的Python環境和Anaconda環境會有衝突。

原生Python的 python pip 是放到使用者環境變數

但是Anaconda也有這些命令。

Anaconda的 python conda pip安裝時是直接放到系統環境變數

這裡說一下環境變數。在命令列裡我們要執行一個可執行xxx.exe程式,最常用的做法就是切換到這個程式所在的檔案目錄,鍵入 xxx就執行了。這樣很麻煩,若我們將這個程式所在的檔案目錄直接放到環境變數裡,不論在那個檔案目錄下,我們都可以鍵入xxx即可執行。

在Anaconda 和 原生Python之間現在出現了命令衝突。你執行python pip ,作業系統怎麼分辨這是哪位大爺的程式?

答案是系統環境變數優於使用者環境變數。

二喜執行python pip 的這些命令都是Anaconda裡的。

原生Python這下就遭殃了。python pip 這些重要的命令用不出來,它就很麻煩。而且匹配pycharm的時候,用原生python建立虛擬環境就會出現創不出來的情況。虛擬環境只能匹配原生的一切配置用到所謂的虛擬環境了。這已經不是虛擬了。

這時你試一試用Anaconda的直譯器去配虛擬環境。同樣是直譯器,Anaconda卻能正常的建立虛擬環境。

因此原生Python就失去了用物之地。很多人就蒙了,認為沒有原生python就有IDLE執行程式。

我們先說說原生python的特點,體積小巧,可以執行python程式(python.exe)的功能,一個pip。最重要的是有一個自帶的IDLE。絕大多數人最初編寫的程式都通過它執行。大家可以在這裡確認一些語法和演算法問題,很方便。

可我們看看Anaconda。

安裝上不生不響,雖然有一個jupyter可以使用類似IDLE的功能,但真的不太順手。Anaconda給人的第一印象就是,龐大的自帶科學計算庫,AI必用。

可是它還有一個重要的功能,分割各種Python環境,類似於我們的虛擬環境。在一個Anaconda裡你可以建立無數的環境。這環境由一個類似完整獨立的python組成,這裡的獨立還包括對應的庫環境,如果你去看它的目錄結構,同一個原生的python幾乎一摸一樣,例如我建立了一個python3.7的環境,這裡可以使用python3.7,我又在這裡pip一個Requests包。過幾天我又建立了一個python3.9的環境,我在這裡pip一個Tensorflow包,這兩者是不相關的。這個功能與Pycharm配合會更好。

這些個環境可以通過Navigator來實現,存放在Anacnda安裝目錄裡的evns目錄裡。

很多人還是一頭霧水,這有什麼用?還不如我一個python IDLE好用。我必須保留原生的python。這是很多人對於原生Python的一個執念。

這裡又要說一個事兒。

Anaconda真是一個悶葫蘆。它自帶了python IDLE。 在安裝後卻沒有像jupyter那樣明顯的顯示。太敗家了。

原生python IDLE

IDLE (python 3.7.4 64-bit)
目標
C:\Users\hp四核\AppData\Local\Programs\Python\Python37\pythonw.exe "C:\Users\hp四核\AppData\Local\Programs\Python\Python37\Lib\idlelib\idle.pyw"

而Anaconda的在哪裡?和著這個一摸一樣啊!

右鍵桌面空白,新建,快捷方式。目標,還可以自己起一個名。

"F:\ProgramData\Anaconda3\pythonw.exe""F:\ProgramData\Anaconda3\Lib\idlelib\idle.pyw"



說到這裡,原生Python有的沒的Anaconda都是有的。為什麼還揪著原來的python不放?

解除安裝原生Python注意如果以前改過直譯器名稱的,改回來才可以正常解除安裝。

所以一個完整的python環境

只需要安裝Anaconda + Pycharm即可。

1 Anaconda使用

由於 很多人在 Anaconda Navigator 介面遇到很多問題。建議直接放棄檢視介面。

這裡介紹命令方法使用Anaconda。

1.1 檢視conda版本

conda -V
4.10.1

1.2 檢視各種虛擬環境

conda info -e
# conda environments:
#
base * F:\ProgramData\Anaconda3

1.3 建立一個虛擬的 python3.7環境 名字叫enviroment_name

conda create -n enviroment_name python=3.7

檔案在Anaconda3\envs

虛擬環境 python3.7 與 原生python3.7 完全一致

你甚至可以利用快捷方式建立一個虛擬環境 python3.7的IDLE。與上面的方法一致。

1.4 虛擬環境的進入與退出

# To activate this environment, use
#
# $ conda activate py37
#
# To deactivate an active environment, use
#
# $ conda deactivate

這兩條命令可以隨時進入(退出)這個虛擬的環境,一旦進入,任何操作都與整體Python環境無關。包括下載包。

可以看到這個環境裡只有四個包。很簡單。

(py37) C:\Users\hp四核>pip list
Package Version
------------ -------------------
certifi 2021.5.30
pip 21.0.1
setuptools 52.0.0.post20210125
wheel 0.37.0
wincertstore 0.2

1.5 虛擬環境的刪除

conda remove -n py37 --all

刪除所有的環境相關檔案。

1.6 Pycharm利用Anaconda的虛擬環境

Pycharm是自帶虛擬環境功能的,不過他只是用一個python.exe在專案vens目錄裡建立虛擬環境。沒有新的直譯器加入。是虛擬包環境。

這裡講如何在pychrm利用Anaconda的虛擬環境。

Interpreter是Python的直譯器,執行Python需要直譯器的幫助。

例如在CMD裡鍵入Python就是呼叫這個直譯器。直譯器會依賴其中的Python版本資訊,來解釋你的程式碼。

任何高階語言都需要直譯器,也都有直譯器。

interpreter 英 [ɪnˈtɜːprətə(r)] 美 [ɪnˈtɜːrprətər] n. 口譯譯員;口譯工作者;演繹(音樂、戲劇中人物等)的人;解釋程式

1.6.1 選擇 Previously configured interpreter

點選新環境使用Anaconda

1.6.2 新增Anaconda的虛擬環境直譯器

這裡等一會兒就行了,他會自動尋找。其實就是虛擬環境裡的Python直譯器。

1.6.3 Create

這就成功建立了一個基於Anaconda的虛擬環境的Python專案。

我們開啟設定

看一下環境的包

2 Pycharm使用

C語言要想執行就必須要有gcc編譯器,C++執行就必須要有g++編譯器。任何語言的執行都需要編譯器的幫助。可是這些語言在建立執行時,我們離他們的編譯器很遠。他們藏在一些大型編譯環境的深處。

python便不一樣了,由於語言特性。他需要在建立一個專案的同時,指定一個Python的編譯器直譯器。

你在命令列執行Python程式的時候 python test.py,其實也是指定了一個直譯器。希望大家能夠理解這層關係。

pycharm的一大優勢就是虛擬環境。根據一個Python的直譯器,在專案目錄裡生成一個虛擬的環境,這個環境的直譯器同外部的想通過,但是第三方包是完全獨立的。

Interpreter 就是 python.exe

2.1 虛擬環境建立

選擇 New environment using Virtualenv 外加一個直譯器Interpreter就可以了,下面圖片用的是Annaconda自帶直譯器。

直譯器使用anaconda的虛擬環境中的 python.exe也是可行的。

虛擬環境是很乾淨的,只有三個包。

2.2 專案的共享

你編寫了一個程式,下載了許多包。程式只有1 m,而專案的包卻有100 G。突然你想把這個專案上傳到網上。

這個100 G的東西壓縮都需要不少時間。有什麼更好的辦法呢。

這個虛擬環境自帶一個Python.exe pip。見下圖

在專案的Terminal執行Python.exe pip就相當於激活了這個虛擬環境。一切操作針對這個虛擬環境。

2.2.1 製作依賴檔案

在專案的Terminal執行

pip freeze > requirements.txt # 將專案的虛擬環境包的依賴放入requirements.txt

這樣你只需要將這兩個檔案傳送給他人即可

code.py
requirements.txt

2.2.2 使用有依賴檔案的專案

建立一個新專案,使用一個新的虛擬環境。放入code.py requirements.txt

在專案的Terminal執行

pip install -r requirements.txt

就會下載裡面的包。製作一個一摸一樣的環境。

pip利用國內阿里雲源 更加快速的下載包

pip install -i http://mirrors.aliyun.com/pypi/simple/ pandas

3 虛擬環境

從某種角度說

Anaconda的虛擬環境是 集中式虛擬環境

Pycharm的虛擬環境是 分散式虛擬環境

文章可能發生改動。一些網站會爬取本文章可能會有出入。

https://www.cnblogs.com/asmurmur/