はじめに
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 のインストールの説明を執筆しました。