前言
許多人學習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在專案venv目錄裡建立虛擬環境。
這裡講如何在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/