[Python] Poetry + Pyenv + PyTorch Setup on Windows
這篇文章會說明如何在 Windows 上使用 Poetry + Pyenv + PyTorch with cuda 來建立 Python 專案。
Pyenv
由於我使用的是 windows,所以我們需要使用 pyenv-win 來管理 python 版本
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
安裝好之後輸入 pyenv --version
來確認是否安裝成功
接著是一些 pyenv 的指令
pyenv install -l # 列出所有 python 版本
pyenv install <python version> # 安裝 python 版本
pyenv global <python version> # 設定全域 python 版本
pyenv versions # 列出所有安裝過的 python 版本
pyenv uninstall <python version> # 移除 python 版本
如果我們要不同專案中使用不同的 python 版本,可以使用以下指令,在當前目錄下建立一個 .python-version
檔案,pyenv 會自動讀取這個檔案
pyenv local <python version>
Poetry
Poetry 可以做到以下的事情 :
- 管理 Python 專案的相依套件
- 建立虛擬環境
- 發布與打包套件
Poetry 在 windows 上的安裝如下 :
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
將 %APPDATA%\Python\Scripts
加入到環境變數中,接著輸入 poetry --version
來確認是否安裝成功
接著建立專案並且安裝套件
poetry init
poetry add <package name>
poetry add <package name> --dev
poetry remove <package name>
我們可以先設定 virtualenvs.in-project
為 true
,這樣虛擬環境就會被建立在專案的資料夾中
poetry config virtualenvs.in-project true
接著使用以下指令來建立虛擬環境
poetry env use <python version>
或使用以下指令進入虛擬環境
poetry shell
可以安裝一些常用的開發套件
poetry add flake8 black isort ipdb --dev
PyTorch
Poetry 預設會從 PyPI 上抓取套件,但是 Pytorch 需要從另外的地方下載,所以我們需要使用以下指令新增來源 (需要修改最後的 cuda 版本)
poetry source add --priority=supplemental torch https://download.pytorch.org/whl/cu124
接著安裝 PyTorch
poetry add torch==2.4.1+cu124 --source torch
執行完之後,pyproject.toml
應該會是類似以下的樣子
[tool.poetry]
name = "test"
version = "0.1.0"
description = ""
authors = [""]
readme = "README.md"
package-mode = false
[tool.poetry.dependencies]
python = "^3.10"
torch = {version = "2.4.1+cu124", source = "torch"}
[[tool.poetry.source]]
name = "torch"
url = "https://download.pytorch.org/whl/cu124"
priority = "supplemental"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
flake8
flake8 是一個 Python 的 Linter,可以用來檢查程式碼是否符合規範,建議安裝 VSCode 的 extension (Flake8)
poetry add flake8 --dev
在根目錄創建一個 .flake8
檔案
[flake8]
max-line-length = 88
extend-ignore = E203, W503
exclude = .git, __pycache__, build, dist
poetry run flake8 .
black
black 是一個 Python 的 code formatter,建議安裝 VSCode 的 extension (Black Formatter),並設定 .vscode
{
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"isort.args": [" - profile", "black"]
}
poetry add black --dev
[tool.black]
line-length = 88
target-version = ['py310']
poetry run black .
isort
isort 是一個 Python 的 import sorter,可以幫助我們整理 import 的順序,同樣建議安裝 VSCode 的 extension (isort)
poetry add isort --dev
poetry run isort .