Python の設定: hkob の雑記録 (13)

はじめに

hkob の雑記録の第13回目は、プログラミングの授業で利用する Python のインストール解説記事を執筆しています。学生によっては、すでに miniforge などで Python をインストールしている場合もありますので、その場合にはインストールしなくていい旨を伝えています。

Formulae の確認

去年までは Brewfile の中身だけを書いて、インストールするように指示していただけでした。しかし、今後自分でパッケージなどを調べたりできるように、ここでも search, info の順序で解説することにしました。まずは、brew search です。Python のようにバージョン違いのものを @3.xx で区別していることも知ってほしいからです。

% brew search python
==> Formulae
boost-python3              python-launcher            python@3.10
bpython                    python-lsp-server          python@3.11
cyclonedx-python           python-markdown            python@3.12
ipython                    python-matplotlib          python@3.13
libvirt-python             python-packaging           python@3.8
micropython                python-setuptools          python@3.9
ptpython                   python-tabulate            reorder-python-imports
python-argcomplete         python-tk@3.10             wxpython
python-build               python-tk@3.11             pythran
python-freethreading       python-tk@3.12             cython
python-gdbm@3.11           python-tk@3.13             jython
python-gdbm@3.12           python-tk@3.9
python-gdbm@3.13           python-yq

==> Casks
mysql-connector-python

If you meant "python" specifically:
It was migrated from homebrew/cask to homebrew/core.

ここで、brew info もしてみます。python は最新版である python@3.13 へのエイリアスであることがわかります。今回、初めて Dependencies が指定されています。パッケージには依存関係があり、動作に必要なものが自動的にインストールされることを説明します。

% brew info python
==> python@3.13: stable 3.13.1 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/python@3.13.rb
License: Python-2.0
==> Dependencies
Build: pkgconf ✘
Required: mpdecimal ✘, openssl@3 ✘, sqlite ✘, xz ✘
==> Caveats
Python is installed as
  /opt/homebrew/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, are installed into
  /opt/homebrew/opt/python@3.13/libexec/bin

See: https://docs.brew.sh/Homebrew-and-Python
==> Analytics
install: 270,071 (30 days), 845,028 (90 days), 885,672 (365 days)
install-on-request: 67,291 (30 days), 185,292 (90 days), 197,358 (365 days)
build-error: 4,516 (30 days)

ここで、復習として VSCode で Brewfile に以下の文を追加してもらいます。

brew "python" # Interpreted, interactive, object-oriented programming language

あとは、bootstrap を実行するだけです。ログが長いですが、依存関係にある他のパッケージが自動的にインストールされていることを説明します。

% ./bootstrap.sh 
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Auto-updated Homebrew!
Updated 4 taps (homebrew/bundle, homebrew/services, homebrew/core and homebrew/cask).
==> New Formulae
cdncheck                   chaos-client               tach
==> New Casks
istherenet

Skipping install of homebrew/bundle tap. It is already installed.
Using homebrew/bundle
Skipping install of homebrew/services tap. It is already installed.
Using homebrew/services
Skipping install of visual-studio-code cask. It is already installed.
Using visual-studio-code
Skipping install of telnet formula. It is already installed.
Using telnet
Installing python
Installing python formula. It is not currently installed.
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.13/manifests/3.13.1
######################################################################### 100.0%
==> Fetching dependencies for python@3.13: mpdecimal, ca-certificates, openssl@3, readline, sqlite and xz
==> Downloading https://ghcr.io/v2/homebrew/core/mpdecimal/manifests/4.0.0-1
######################################################################### 100.0%
==> Fetching mpdecimal
==> Downloading https://ghcr.io/v2/homebrew/core/mpdecimal/blobs/sha256:0f5f269b
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2024-
######################################################################### 100.0%
==> Fetching ca-certificates
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/blobs/sha256:41
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.4.0
######################################################################### 100.0%
==> Fetching openssl@3
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/blobs/sha256:bf2e6c5c
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/readline/manifests/8.2.13
######################################################################### 100.0%
==> Fetching readline
==> Downloading https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:738c27cee
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/sqlite/manifests/3.47.2
######################################################################### 100.0%
==> Fetching sqlite
==> Downloading https://ghcr.io/v2/homebrew/core/sqlite/blobs/sha256:7eca69ad469
######################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/xz/manifests/5.6.3
######################################################################### 100.0%
==> Fetching xz
==> Downloading https://ghcr.io/v2/homebrew/core/xz/blobs/sha256:743c3d366f11b13
######################################################################### 100.0%
==> Fetching python@3.13
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.13/blobs/sha256:e9acf7
######################################################################### 100.0%
==> Installing dependencies for python@3.13: mpdecimal, ca-certificates, openssl@3, readline, sqlite and xz
==> Installing python@3.13 dependency: mpdecimal
==> Downloading https://ghcr.io/v2/homebrew/core/mpdecimal/manifests/4.0.0-1
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/7b63c3b34bee402290af49fac829a6682ab45ea5c9258b6fe03b590a03a4c4a9--mpdecimal-4.0.0-1.bottle_manifest.json
==> Pouring mpdecimal--4.0.0.arm64_sequoia.bottle.1.tar.gz
🍺  /opt/homebrew/Cellar/mpdecimal/4.0.0: 22 files, 641.3KB
==> Installing python@3.13 dependency: ca-certificates
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2024-
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/c41a485689e1507291617fb1f0e2322a087064960638fd050663df867bf53928--ca-certificates-2024-12-31.bottle_manifest.json
==> Pouring ca-certificates--2024-12-31.all.bottle.tar.gz
==> Regenerating CA certificate bundle from keychain, this may take a while...
🍺  /opt/homebrew/Cellar/ca-certificates/2024-12-31: 4 files, 233.9KB
==> Installing python@3.13 dependency: openssl@3
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.4.0
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/a8a169d38329b14f967d497d0ea77eee6dc5444175093fc7b26026b357e81736--openssl@3-3.4.0.bottle_manifest.json
==> Pouring openssl@3--3.4.0.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/openssl@3/3.4.0: 7,236 files, 33.4MB
==> Installing python@3.13 dependency: readline
==> Downloading https://ghcr.io/v2/homebrew/core/readline/manifests/8.2.13
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/aa1afa38997a2866d91c81fdda8b36d436cd4ea7a82aed07d13c83c56eb3460e--readline-8.2.13.bottle_manifest.json
==> Pouring readline--8.2.13.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/readline/8.2.13: 51 files, 1.7MB
==> Installing python@3.13 dependency: sqlite
==> Downloading https://ghcr.io/v2/homebrew/core/sqlite/manifests/3.47.2
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/27ec8d19bd501f36464da50d9b2641d87015b451a6b81864afce75a247a2d3b1--sqlite-3.47.2.bottle_manifest.json
==> Pouring sqlite--3.47.2.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/sqlite/3.47.2: 12 files, 4.9MB
==> Installing python@3.13 dependency: xz
==> Downloading https://ghcr.io/v2/homebrew/core/xz/manifests/5.6.3
Already downloaded: /Users/hkob/Library/Caches/Homebrew/downloads/e68799185cc17334108ba286ba8c3df0587c9fd8375647d85f7157b62a797599--xz-5.6.3.bottle_manifest.json
==> Pouring xz--5.6.3.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/xz/5.6.3: 96 files, 2.0MB
==> Installing python@3.13
==> Pouring python@3.13--3.13.1.arm64_sequoia.bottle.tar.gz
==> /opt/homebrew/Cellar/python@3.13/3.13.1/bin/python3.13 -Im ensurepip
==> /opt/homebrew/Cellar/python@3.13/3.13.1/bin/python3.13 -Im pip install -v --
==> Caveats
Python is installed as
  /opt/homebrew/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, are installed into
  /opt/homebrew/opt/python@3.13/libexec/bin

See: https://docs.brew.sh/Homebrew-and-Python
==> Summary
🍺  /opt/homebrew/Cellar/python@3.13/3.13.1: 3,269 files, 65.3MB
==> Running `brew cleanup python@3.13`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Caveats
==> python@3.13
Python is installed as
  /opt/homebrew/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, are installed into
  /opt/homebrew/opt/python@3.13/libexec/bin

See: https://docs.brew.sh/Homebrew-and-Python
Homebrew Bundle complete! 5 Brewfile dependencies now installed.
hkob@vmSequoia dotfiles % 

venv の設定

一昨年まではそのまま Homebrew で入れた python にそのままパッケージをインストールしていました。しかし、昨年度 pip 23.0 から PEP668 が適用され、デフォルトではシステムの python に直接パッケージをインストールすることができなくなりました。

そこで昨年度からはホームディレクトリの下に .venv を作成し、ここに仮想環境を作ることにしました。以下のコマンドを実行させます。

python3 -m venv ~/.venv

この仮想環境の Python を使うには activate が必要です。

hkob@vmSequoia ~ % source ~/.venv/bin/activate
(.venv) hkob@vmSequoia ~ % 

逆にこの Python を使わなくなった場合には、deactivate します。

(.venv) hkob@vmSequoia ~ % deactivate
hkob@vmSequoia ~ % 

毎回、このコマンドをタイプしたくないので、 .zprofile にエイリアスを作成させます。

eval "$(/opt/homebrew/bin/brew shellenv)"
alias use_python="source $HOME/.venv/bin/activate"

これで use_python というコマンドがエイリアスとして登録されます。実行すると先ほどと同様に activate されました。

% use_python
(.venv) hkob@vmSequoia ~ % 

pytest のインストール

プログラミングの授業では、コードを書くことよりもテストを記述することを重要視しています。そのために、最初から pytest を使ってテストを執筆します。そのために pytest をインストールさせています。use_python の後に pip でインストールします。

use_python
python3 -m pip install pytest

おわりに

今回は、プログラミングの授業で使う Python のインストールの説明を執筆しました。

hkob.notion.site