iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Python

初學者的 30 天 Python 復健課程系列 第 29

復健第二十九天:怎麼樣都(可能)不會搞壞電腦的虛擬環境 Virtual Environment

  • 分享至 

  • xImage
  •  

在開始正式使用一個程式語言進行程式編寫前,常常會聽到前輩們說:「設定環境大概就可以弄個半天一天了。」到底這邊指的環境是什麼?而為什麼環境會這麼令人頭痛複雜。

其實環境可以簡單地被視為「運行程式、專案所需要的一切配置」,用日常生活做舉例,如果我們想養一隻金魚,我們會準備一個水族箱,裡面放入適當溫度的水,打入氧氣、種植水草等,待一切準備就緒,才會把金魚放入魚缸,正式開始養魚。

同樣地,每個專案都有所需的配置,只是在我們的日常生活中,大多數時刻我們只要執行安裝檔,瘋狂地點及下一步,安裝程式便會自動地把所有需要的軟體安裝完成,但如今我們將要成為一個軟體工程師,所以是時候換我們來幫其他不懂軟體的大眾們完成這一步了。

設置虛擬環境

「環境就環境,還要虛擬環境?」為了更了解什麼虛擬環境,以及為什麼需要虛擬環境,我們要再來舉一個日常生活中的例子,幫助大家更了解虛擬環境的概念。

相信多數人都知道蘋果的 MacOS 與微軟的 Windows 作業系統,有些軟體只能在 MacOS 運行,而有些只能在 Windows 上運行,如果我們想在 MacOS 上面運行 Windows 的軟體,有經驗的人都會知道,此時我們可以選擇在 Macbook 上面安裝雙系統或模擬器,而這個模擬器就可以當作是一種虛擬環境的體現,我們在這個模擬器操作的一切行為,基本上都不會影響到原本的 MacOS 運作,像是「被隔離出來的虛擬異次元空間」,如果有天我們不需要了,也可以簡單刪除即可,不需要進行複雜的重新安裝。

同樣地,我們也會希望每次執行一個專案時,以為這個專案設置專屬的環境,在沒有虛擬環境的狀況下,我們可能要在電腦中安裝多個 Python,然而這樣做的缺點,不僅要時時切換 Python 版本,電腦裡也會因為多個版本的 Python 佔據許多硬碟空間,因此建立虛擬環境會是一個更好的選擇,而且一旦我們需要刪除專案,只要將虛擬環境的路徑一併移除,便能清掃地乾乾淨淨。

所以在開始一個新專案之前,我們會先設置一個虛擬環境,藉此創建一個隔離的環境,避免在不同專案間的相依套件發生衝突。當我們在終端機輸入 pip freeze 時(忘記 PIP 是什麼,可以回頭看這篇文章),可以看到所有目前安裝在電腦上的套件,而如果我們使用虛擬環境且處在虛擬環境的路徑內,就只會看到專屬於目前專案的套件。

如何安裝虛擬環境

能夠創建 Python 虛擬環境的套件有數種,其中又以 virtualenv 與 Poetry 這兩個最為常見,我們接下來將示範 virtualenv 的安裝與簡單使用:

  1. 安裝 vitualenv:在終端機裡輸入 pip install virtualenv 來安裝 virtualenv
  2. 切換至指定的專案路徑:cd Document/test (這代表 我的文件 內有一個名為 test 的資料夾)
  3. 在專案路徑內創建虛擬環境,並將該虛擬環境命名為 venvvirtualenv venv
  4. 檢查虛擬環境是否創建成功,如果成功的話,會看見 venvls
  5. 啟動虛擬環境,如果啟動成功的話,專案目錄(路徑)會顯示 (venv)source venv/bin/activate
  6. 檢查目前虛擬環境內安裝的套件,由於我們目前沒有安裝任何套件,所以輸入完指令後,應該不會顯示任何東西:pip freeze
  7. 安裝指定套件,例如我們要安裝 pandaspip install pandas
  8. 再次檢查目前已安裝的套件,應該要顯示 pandas 等其他相關套件與套件版本號:pip freeze
    numpy==2.1.2
    pandas==2.2.3
    python-dateutil==2.9.0.post0
    pytz==2024.2
    six==1.16.0
    tzdata==2024.2
    
  9. 當我們結束時,需要關閉虛擬環境來釋放資源:deactivate

建立虛擬環境就是這麼地輕鬆寫意,如果我們想要砍掉整個 test 專案目錄,也可以用刪除目錄的指令 rm -rf test,一刀把所有東西刪去,完全不用擔心其他的後遺症。


上一篇
復健第二十八天:爸爸有的我也都有,類別的繼承
下一篇
復健第三十天:OMG 最後一天來爬個蟲吧
系列文
初學者的 30 天 Python 復健課程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言