Python開發篇——構建虛擬Python開發環境(Conda+Poetry)

DisonTangor發表於2021-07-26

前言

之前雖略有提及Python,但是沒有實際地寫點料。慚愧,慚愧,所以這次先起個頭,講講如何構建虛擬Python開發環境。相信之前看過我部落格的人可能會想:博主不會又要聊聊Docker吧?放心,不會。首先Docker雖然適合構建虛擬Python容器,但是卻存在一個問題——互動性。Python開發者必然是希望生成的軟體具備可移植性。但是用Docker做移植是需要Docker build的。這樣會使得開發過程變得極為不方便。所以我們需要聊聊除Docker以外,Python如何實現虛擬開發環境。

為什麼需要虛擬開發環境?

Java的圈子流行一句“Java隨你怎麼升,我還用鐵打的Java8”,但是我們應該知道開發語言都存在多個版本,而且有些語言會在強大的社群擁護下成長,產生出一些多版本的LTS版本或是stable版本,用於專案的發展。於是,我們在接觸新老專案的時候,就會需要調整Python的開發環境。所以原因如下:

  1. 多專案之間便於切換開發環境。
  2. 虛擬環境可以產生簡潔的配置檔案,便於專案實施部署。
  3. 與Git結合,便於專案的管理和開發環境的快速構建及重構。

工具

  1. conda(linux採用miniconda,windows採用anaconda)
  2. Poetry

為什麼需要Conda?

正如Rust可以通過Cargo來實現版本的切換,Python也有很多相關的工具如pyenvpyenv-virtualenvconda等。這裡我推薦conda,首先他提供了科學計算的神器Anaconda包和類似於PYPI的conda庫,其次他可以輕鬆的構建各種版本的Python虛擬開發環境。

Linux安裝

執行下面的bash命令:

$ cd ~ && rm -rf ./Anaconda3 # 刪除原來的anaconda
# 自行清除環境變數裡的anaconda資訊
$ wget "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh"
$ bash Miniconda3-latest-Linux-x86_64.sh
# 重啟計算機
# reboot

$ conda env list檢視啟用版本
$ conda create -n env_name python=3.8
$ conda activate env_name # 啟用虛擬環境

注意:conda可以通過 export 匯出環境配置檔案

Windows安裝

三種方式:

  1. 自己搜尋anaconda官網,下載exe檔案,麻瓜式安裝。
  2. choco安裝
  3. scoop安裝

為什麼需要Poetry

Poetry是一個 Python 打包和依賴管理系統,最初於 2018 年釋出。它可以順利處理依賴項,特別是如果您在全新環境中使用 Poetry 然後新增您的 Python 包。它還可以確定性地處理專案的其他工具和配置,因為它使用TOML格式作為 Python 配置檔案。簡而言之,TOML 旨在使用易於閱讀的最小配置檔案。Poetry 使用配置檔案來安裝 python 包並設定配置。pyproject.toml。

安裝Poetry

這裡只以linux帶過:

$curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
# 重啟計算機
# reboot

構建一個Flask應用

$ poetry --version
output: Poetry version 1.1.7
$ poetry new pyService
output: Created package pyservice in pyService
$ poetry add flask

pyproject.toml

[tool.poetry]
name = "pyService"
version = "0.1.0"
description = ""
authors = ["DsnTgr <email@address>"]

[tool.poetry.dependencies]
python = "^3.9"
Flask = "^2.0.1"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

pyservice目錄下__init__.py

# hello_world/__init__.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == "__main__":
    app.run()

執行下面的命令:

$ export FLASK_APP="pyservice"
$ poetry run flask run
* Serving Flask app 'pyservice' (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat

結論

首先通過Conda來實現Python多版本的管理,接著通過Poetry來實現Python專案的依賴包管理,最終達到構建虛擬Python開發環境。

感謝

  1. A Guide to Python Environment, Dependency and Package Management: Conda + Poetry
  2. Building a Python package, and a container image with poetry

相關文章