| marp | true |
|---|---|
| theme | gaia |
| paginate | true |
| backgroundImage | url('https://marp.app/assets/hero-background.jpg') |
Akio Taniguchi / 2023-07-11
当日までに、以下の準備と理解をお願いします。
- 手元(ローカル)のマシンでのPython 3の用意
- 最新のmacOSであればデフォルトで入っているはず
- なければHomebrewで導入→
brew install python
- Bash(zsh)の最低限のコマンドの理解
cd,mv,rm,mkdir,lsあたりが使えればOKです
- Bash(zsh)の環境変数
PATHの理解- いわゆる「パスを通す」とは何かが分かればOKです
- 環境構築とは何か
- Pythonのディレクトリ構造を理解する
- 実行プログラム・標準ライブラリ・外部ライブラリ
- 標準的なPythonの環境構築
- 仮想環境とは何か・なぜ必要か
- 標準ライブラリ(venv)を使った環境構築
- ツールを使ったPythonの環境構築
- Pipenv / PoetryによるPython tutorials対応の環境構築
- 環境構築
- とあるプロジェクトに必要な実行プログラム・ライブラリを、他のプロジェクトとは独立にローカルにインストールすること
- エディタ・linter(構文チェック)・formatter(自動整形)などプログラミングを支援する環境を整えること(今回の範囲外)
- Pythonの環境構築
- 実行プログラム・標準ライブラリ → Homebrew
- 外部ライブラリ → venv, pip, あるいはパッケージ管理ツール
- 実行プログラム(一部抜粋)
/path/to/bin/配下に存在する- python(3):Pythonスクリプトを実行するプログラム
- pip(3):外部ライブラリをインストールするためのプログラム
- 標準ライブラリ:Pythonに付属のライブラリ群
/path/to/lib/python3.x/配下に存在する
- 外部ライブラリ:ユーザがpipでインストールしたライブラリ
/path/to/lib/python3.x/site-packages/配下に保存される
$ which python3
/usr/bin/python3$ which pip3
/usr/bin/pip3$ python3 -m site
sys.path = [
'/Users/<user name>',
'/Library/Developer/CommandLineTools/.../3.9/lib/python39.zip',
'/Library/Developer/CommandLineTools/.../3.9/lib/python3.9',
'/Library/Developer/CommandLineTools/.../3.9/lib/python3.9/lib-dynload',
'/Library/Developer/CommandLineTools/.../3.9/lib/python3.9/site-packages',
]- 単純な環境構築
- Python(とpip)をHomebrewでインストールする
- pipを使ってsite-packagesに直に外部ライブラリを追加する
- 利点と欠点
- 🙂 シンプルで分かりやすい(共通Python環境としてはアリ)
- 🙁 異なるバージョンのライブラリが共存できない
- 必要なライブラリが異なるプロジェクトの両立が難しい
- ライブラリ自身も他のライブラリに依存していることもある
- 🙁 構築に失敗した場合全てのプロジェクトに影響が出る
- 仮想環境を使った環境構築(推奨)
- Python(とpip)をHomebrewでインストールする
- プロジェクトごとに仮想環境を作成する
- 仮想環境のsite-packagesに外部ライブラリを追加する
- 利点と欠点
- 🙂 プロジェクトごとに必要なライブラリを用意できる
- 🙂 プロジェクトに必要なライブラリだけを管理できる
- 🙂 構築に失敗した場合の対処が楽(仮想環境を作り直すだけ)
- 🙁 仮想環境に出入りするのが若干面倒(→ツールを使う)
- 仮想環境(virtual environment)とは
- プロジェクト(のディレクトリ)ごとに独自の実行プログラムとsite-packagesを作成し、利用可能にするためのPythonの仕組み
- 仮想環境の作成
- 標準ライブラリ
venvを使用する
- 標準ライブラリ
- 仮想環境の使用
- 有効化(activate):環境変数
PATHを一時的に書き換え、実行プログラムをシェルから優先的に利用可能にする - 無効化(deactivate):環境変数
PATHを元に戻す
- 有効化(activate):環境変数
- 仮想環境の作成
- 仮想環境に必要な諸々はプロジェクト配下の
.venvディレクトリに格納される - ディレクトリ名は何でも良いが、慣例的に
.venvが使われる
- 仮想環境に必要な諸々はプロジェクト配下の
$ mkdir /path/to/project # プロジェクト用ディレクトリを作成
$ cd /path/to/project
$ python3 -m venv .venv # プロジェクト配下に仮想環境を作成
$ ls -a
. .. .venv.venvには実行プログラム(のリンク)とsite-packagesが存在する
$ tree -L 3 .venv
.venv
├── bin # ipython, jupyterなどもここに保存される
│ ├── activate # 仮想環境の有効化のためのコマンド
│ ├── pip
│ ├── pip3
│ ├── python -> python3 # シンボリックリンク
│ └── python3 -> /Library/Developer/.../python3 # シンボリックリンク
├── include
├── lib
│ └── python3.9 # 標準ライブラリはコピーされない
│ └── site-packages
└── pyvenv.cfg仮想環境を有効化する前後でPATHが書き換わることを確認する
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
$ which python3
/usr/local/bin/python3$ source .venv/bin/activate
(.venv) $ echo $PATH
/path/to/project/.venv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
(.venv) $ which python3
/path/to/project/.venv/bin/python3- 仮想環境への外部ライブラリのインストール
(.venv) $ pip install -q numpy
(.venv) $ pip list
Package Version
---------- -------
numpy 1.25.1
pip 23.1.2
setuptools 58.0.4- 仮想環境の無効化
(.venv) $ deactivate- 仮想環境は便利だけれど…
- 🙁 仮想環境の作成・使用に必要なステップが多い
- 🙁 仮想環境の出入り(有効・無効化)が面倒
- 🙁 外部ライブラリのインストールが手作業
- パッケージ管理ツール
- 🙂 仮想環境の作成・使用を簡単にする
- 🙂 外部ライブラリを設定ファイルで管理する
- 🙂 その他、ツールごとにプラスαの機能を提供する
- 代表的なツール
- ベストプラクティス?
- 2023年現在、唯一の方法と言えるものはない。何をやりたいかで使い分けよう。迷ったら上記2つから選ぶのが良いだろう。(ただし、A研としては使用実績からPoetryを推奨)
- ツールごとの違い
Poetryのインストールはコマンドラインで行う。
$ curl -sSL https://install.python-poetry.org | python3 -
$ brew install poetry # "This build of python ... symlinks"に遭遇したらこっちを試すPoetryが仮想環境をプロジェクト配下に作成するように設定しておくと分かりやすい(デフォルトでは全く別の場所に作られる)。
$ poetry config virtualenvs.in-project trueプロジェクト(環境構築したいディレクトリ)を作成し、移動後poetry initで初期設定を行う。pyproject.tomlが生成される。
$ mkdir /path/to/project
$ cd /path/to/project
$ poetry init
Package name [project]: <プロジェクト名>
Version [0.1.0]: <バージョン>
Description []: <プロジェクトの説明>
Author [<開発者名>, n to skip]:
License []: <ライセンスの種類>
Compatible Python versions [^3.11]: <プロジェクトがサポートするPythonのバージョン(後述)>
Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your development dependencies interactively? (yes/no) [yes] no
Do you confirm generation? (yes/no) [yes] yes$ cat pyproject.toml
[tool.poetry]
name = "project"
version = "0.1.0"
description = ""
authors = ["<開発者名>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"poetry addで外部ライブラリのインストールを行う。仮想環境も同時に生成される。インストールが終わるとpoetry.lockが生成される。
$ poetry add numpy matplotlib
Creating virtualenv project in /path/to/project/.venv
Using version ^3.7.2 for matplotlib
Using version ^1.25.1 for numpy
...
Package operations: 11 installs, 0 updates, 0 removals
• Installing numpy (1.25.1)
• Installing matplotlib (3.7.2)
... # numpy, matplotlib以外の必要パッケージもインストールされる
Writing lock filepoetry runで仮想環境に「入った」状態でコマンドを実行ができる。
$ poetry run python /path/to/script.py # 仮想環境のPython 3で実行される
$ # コマンドの実行が終わると仮想環境の外に自動的に出るpoetry shellで仮想環境に入ったままの状態にもできる。
$ poetry shell
(project-py3.11) $ python # 仮想環境のPython 3が起動する
(project-py3.11) $ deactivate # venvと同様にdeactivateで抜ける
$- pyproject.toml: プロジェクトに必要なPythonのバージョンと外部ライブラリのバージョンの条件を記述する。
poetry addで自動記述されるが、条件を変えたい場合は自分で編集することになる。poetry add numpy==1.20のように追加時に指定することも可能。 - poetry.lock: Poetryによって仮想環境にインストールされた外部ライブラリの実際のバージョンの情報が保存される。
poetry updateでpyproject.tomlに書かれた条件に従って仮想環境を都度更新できる。基本的にこのファイルはユーザが編集してはならない。
| 表記(例) | 条件 |
|---|---|
python = ">=3.8, <3.12" |
3.8以上かつ3.12未満のPythonのみ許容(,はAND) |
numpy = "^1.20" |
1.20以上、2.0未満のnumpyのみ許容(メジャーバージョンを上げてはいけない) |
pandas = "^1.5 | ^2.0" |
1.5以上かつ2.0未満、または2.0以上かつ3.0未満のみ許容(|はOR) |
- 環境作成・保存:
poetry init,poetry addで設定ファイル(pyproject.toml,poetry.lock)を一から作成。これらをGitHub等のクラウドで管理しておくことで、開発環境を「保存」する。 - 環境復元: 設定ファイルを新しいマシンにコピーし、シングルコマンド(
poetry install)でコピー元と同一の環境を「復元」する。 - 環境更新:
pyproject.tomlを編集してPythonや外部ライブラリの条件を更新し、poetry updateで実際にインストールされたものも更新することで、開発環境を「更新」する。

