從Anaconda到pyenv:在ubuntu上使用pyenv建立Python開發環境

緣由

初始學習Python便是以資料工程的領域入門,Anaconda提供不少資料科學與分析所需的套件,且預設安裝Jupyter notebook,基於傻瓜部署,一路使用至今。因如下介紹的conda的部署缺點,一直有考慮其他Python開發環境部署方式。

眾所皆知,Apple在2021推出自製ARM M1晶片,本篇操作載入ARM架構下的image,Ubuntu 20.04.5 LTS

以pyenv + virtualenv紀錄部署上的重點。

Python開發環境部署

  1. Anaconda
  • 優點:傻瓜部署,只需按照官方說明安裝,安裝完後依照專案設定python版本與env,即可快速使用
  • 缺點:
    • 因預設載好各種資料科學套件包,從下載到安裝完成需30分鐘以上
    • 可使用conda與pip安裝套件,當環境需要轉移,整理requirement.txt耗時
    • 當有封裝程式需求時,因有非常多套件一起封裝,最終封裝完的程式檔案可能佔用太多空間
  1. Miniconda
    因肥大的資料科學套件引人詬病,miniconda是anaconda的精簡版,只有環境控制的相關功能,沒有多餘的library
  • 優點:免預先安裝多餘library,可繼續使用conda管理python env
  • 缺點:與Anaconda相同,當環境需要轉移,整理requirement.txt耗時
  1. pyenv
  • 優點:

    • 與Miniconda類似,極輕量
    • 僅用pip進行管理
  • 缺點:僅有python版本管理,env管理需搭配pyenv-virtualenv

主機環境

  • 操作系统: Ubuntu 20.04.5 LTS (Focal Fossa)
  • 内核版本: 5.15.0-48-generic

安裝pyenv

安裝參考pyenv 官方 GitHub

  1. 從GitHub載入pyenv

    1
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  2. 在 ~/.bashrc 添加以下字段

    1
    2
    3
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
  3. 在 ~/.profile 添加以下字段

    1
    2
    3
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
    echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
    echo 'eval "$(pyenv init -)"' >> ~/.profile
  4. 重啟shell,使環境變數生效

    1
    exec "$SHELL"
  5. 查閱pyenv下所有Python版本,檢查是否安裝成功

    1
    pyenv versions

    輸出如下說明即代表安裝成功

    1
    * system (set by /home/username/.pyenv/version)

使用 pyenv install 安裝 Python

  1. 列出所有可安裝的Python版本

    1
    pyenv install --list
  2. 安裝Python 3.6.5

    1
    pyenv install 3.6.5
  • 執行後出現訊息
    1
    2
    3
    4
    Downloading Python-3.6.5.tar.xz...
    -> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
    Installing Python-3.6.5...
    Installed Python-3.6.5 to /home/dawn/.pyenv/versions/3.6.5
  1. 等待安裝完成後,重新查看pyenv版本輸出如下,可切換環境使用。
    PS: 僅一種版本對應一個環境,並不夠便捷,因此安裝pyenv-virtualenv可以更方便協助管理環境。
    1
    2
    * system (set by /home/dawn/.pyenv/version)
    3.6.5

安裝pyenv-virtualenv

依據官網說明,pyenv-virtualenv為Pyenv的外掛套件,可以管理Python的虛擬環境

  1. 從GitHub載入pyenv-virtualenv

    1
    git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
  2. 在 ~/.bashrc 添加以下字段

    1
    echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
  3. 重啟shell,使環境變數生效

    1
    exec "$SHELL"
  4. 創建虛擬環境,環境名稱myenv
    PS:需要注意要先以pyenv建立3.6.5的python版本,才有辦法創建該版本的env,若無指定版本,則以系統預設版本為主

    1
    pyenv virtualenv 3.6.5 myenv

切換環境

  1. global
    1
    2
    pyenv global myenv # 設定系統預設的python環境為myenv
    pyenv global 3.6.5 # 設定系統預設python版本
  • 查閱系統當下版本,以系統設定python版本為例,輸出如下
    1
    2
    3
    4
      system
    * 3.6.5 (set by /home/dawn/.pyenv/version) # *為系統預設版本
    3.6.5/envs/myenv
    myenv
  1. local
    可在所屬專案目錄下,指定專案Python版本,該目錄會出現.python-version 檔案,隨後即可以pip安裝package
    1
    pyenv local myenv

啟動、退出、移除環境

  1. 啟動環境

    1
    pyenv activate myenv
  2. 退出環境

    1
    pyenv deactivate
  3. 移除環境

    1
    pyenv uninstall myenv

感想

從參考文章告別 Anaconda:在 macOS 上使用 pyenv 建立 Python 開發環境 看到註解

「不同 Python 版本間的虛擬環境管理」和「不同專案間的虛擬環境管理」基本上是兩件事,只不過 Anaconda 透過 conda 同時都能做到而已。

實際以pyenv + virtualenv操作後更能瞭解該說明,是以往僅使用conda來管理環境時沒有思考過的事。

【爬蟲基礎介紹】part2: HTTP架構

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×