プロジェクトごとにライブラリを揃える
プロジェクトでは numpy や pandas などのサードパーティライブラリが必要で、プロジェクトごとに必要なバージョンも違います。1つの共有 Python にすべて入れるとバージョンが衝突し、あるプロジェクトのためのアップグレードが別のプロジェクトを壊します。仮想環境は、Python インタープリターのコピーとインストール済みライブラリを専用に持つプライベートなフォルダーで、各プロジェクトが必要なものだけを持てます。pip は、Python Package Index(PyPI)からライブラリをダウンロードし、有効な環境にインストールするツールです。
# Create an environment in the project folder (once)
python -m venv .venv
# Activate it (every new terminal)
source .venv/bin/activate # macOS and Linux
.venv\Scripts\activate # Windows
# The prompt now shows (.venv); python and pip belong to it
python -c "import sys; print(sys.prefix)"
# Leave it
deactivatepip でインストールする
環境が有効なとき、pip install numpy でライブラリを追加し、pip install numpy==1.26.4 で正確なバージョンを指定し、pip install -U numpy でアップグレード、pip uninstall numpy で削除します。pip list でインストール済みのものを確認できます。迷ったら python -m pip として呼び出すと、実行する Python と同じ Python に属することが保証されます。sudo pip は決して使わず、システムの Python にもインストールしないでください。
# Install, pin and inspect (environment active)
python -m pip install numpy pandas
python -m pip install "scipy>=1.11,<2"
python -m pip list
# Show one library
python -m pip show numpyrequirements.txt とバージョン指定
requirements ファイルは、プロジェクトに必要なライブラリを1行に1つずつ並べたもので、誰でも pip install -r requirements.txt で環境を再現できます。pip freeze > requirements.txt はインストール済みの正確なバージョンを書き出します。各行は名前と、省略可能なバージョン指定子でできています:==1.26.4(ぴったり)、>=2.0(以上)、<3(未満)、!=2.1(それ以外)、~=1.4.2(互換:1.4.2 以上で 1.4.x のまま)。# で始まる行はコメントです。バージョンは部分ごとに数値として比較されるので、1.10 は 1.9 より古いのではなく新しいです。
# A version is a tuple of numbers, not a string
print("1.10" > "1.9") # False (text order is wrong!)
def version_tuple(text):
return tuple(int(part) for part in text.split("."))
print(version_tuple("1.10") > version_tuple("1.9")) # True
print(version_tuple("2.0.1")) # (2, 0, 1)
# Reading one requirements line
line = "numpy>=1.26 # for arrays"
name_and_spec = line.split("#", 1)[0].strip()
print(name_and_spec) # numpy>=1.26プロジェクトを再現可能に保つ習慣
環境はプロジェクトごとに1つ作り、.venv としてプロジェクト内に置きますが、サイズが大きくマシン固有なのでバージョン管理には含めません。代わりに requirements.txt(または pyproject.toml)をコミットします。必要なものには緩い指定(>=)を書き、結果を再現する必要があるときは正確なバージョン(==)を固定します。調子が悪ければ、.venv を削除して requirements ファイルから1分で作り直せます。
# requirements.txt
numpy==1.26.4 # pinned: reproduce results exactly
pandas>=2.0 # at least 2.0
scipy~=1.11.0 # 1.11.x, but not 1.12
# plotting waits until we need it
# Rebuild the environment anywhere
python -m venv .venv
python -m pip install -r requirements.txt
# Record what is installed right now
python -m pip freeze > requirements.txtimport が失敗します。何かをインストールする前に、プロンプトに (.venv) が表示され、python -c "import sys; print(sys.prefix)" がプロジェクト内を指していることを確認しましょう。python -m venv .venvを作って有効にする。プロジェクトごとに1つの環境python -m pip install name==version、pip install -r requirements.txt、pip freeze- 指定子は
==、>=、<、!=、~=。バージョンは数値のタプルで比較し、.venvではなく requirements をコミットする
次は Git の基本です。コードへのすべての変更を記録し、問題が起きたら元に戻せるようにします。
ラボ:採点される内容
parse_requirementで requirements の1行を読み取る25点parse_requirementsで requirements ファイル全体を読み取る25点version_tupleでバージョンを比較できる形にする25点satisfiesでバージョンが条件を満たすか調べる25点