前言
之前雖略有提及Python,但是沒有實際地寫點料。慚愧,慚愧,所以這次先起個頭,講講如何構建虛擬Python開發環境。相信之前看過我部落格的人可能會想:博主不會又要聊聊Docker吧?放心,不會。首先Docker雖然適合構建虛擬Python容器,但是卻存在一個問題——互動性。Python開發者必然是希望生成的軟體具備可移植性。但是用Docker做移植是需要Docker build的。這樣會使得開發過程變得極為不方便。所以我們需要聊聊除Docker以外,Python如何實現虛擬開發環境。
為什麼需要虛擬開發環境?
Java的圈子流行一句“Java隨你怎麼升,我還用鐵打的Java8”,但是我們應該知道開發語言都存在多個版本,而且有些語言會在強大的社群擁護下成長,產生出一些多版本的LTS版本或是stable版本,用於專案的發展。於是,我們在接觸新老專案的時候,就會需要調整Python的開發環境。所以原因如下:
- 多專案之間便於切換開發環境。
- 虛擬環境可以產生簡潔的配置檔案,便於專案實施部署。
- 與Git結合,便於專案的管理和開發環境的快速構建及重構。
工具
- conda(linux採用miniconda,windows採用anaconda)
- Poetry
為什麼需要Conda?
正如Rust
可以通過Cargo
來實現版本的切換,Python也有很多相關的工具如pyenv
、pyenv-virtualenv
和conda
等。這裡我推薦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安裝
三種方式:
- 自己搜尋anaconda官網,下載exe檔案,麻瓜式安裝。
- choco安裝
- 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開發環境。