1. 概要
表題のとおりのアップグレードを行おうと思います。
2. 状況
2026年1月13日時点で、下記の状況にあります。
ls -lhd /usr/ports/lang/python*
drwxr-xr-x 2 root wheel 512 10月 20 2022 /usr/ports/lang/python
drwxr-xr-x 2 root wheel 512 1月 5 07:11 /usr/ports/lang/python-doc-html
drwxr-xr-x 2 root wheel 512 10月 20 2022 /usr/ports/lang/python-doc-pdf-a4
drwxr-xr-x 2 root wheel 512 10月 20 2022 /usr/ports/lang/python-doc-text
drwxr-xr-x 2 root wheel 512 11月 2 2023 /usr/ports/lang/python-mode.el
drwxr-xr-x 2 root wheel 512 4月 10 2025 /usr/ports/lang/python-tools
drwxr-xr-x 2 root wheel 512 10月 20 2022 /usr/ports/lang/python2
drwxr-xr-x 3 root wheel 512 3月 11 2025 /usr/ports/lang/python27
drwxr-xr-x 2 root wheel 512 6月 19 2024 /usr/ports/lang/python3
drwxr-xr-x 3 root wheel 512 11月 4 07:16 /usr/ports/lang/python310
drwxr-xr-x 3 root wheel 512 10月 17 07:32 /usr/ports/lang/python311
drwxr-xr-x 3 root wheel 512 1月 5 07:11 /usr/ports/lang/python312
drwxr-xr-x 3 root wheel 512 12月 11 07:13 /usr/ports/lang/python313
drwxr-xr-x 2 root wheel 512 11月 5 07:23 /usr/ports/lang/python313t
drwxr-xr-x 3 root wheel 512 1月 9 07:20 /usr/ports/lang/python314
そろそろ、「python311」から「python312」への潮時、と思った次第です。
3. /etc/make.conf 編集
ここから、いつも手戻りが発生しますが・・・今回はどうかな?
vi /etc/make.conf
現在、下記を記述している。
DEFAULT_VERSIONS+=python=3.11 python3=3.11
の代わりに下記を記述します。
DEFAULT_VERSIONS+=python=3.12 python3=3.12
4. アップグレード
pkg set -o lang/python311:lang/python312
下記を訊いてきますので。
Change origin from lang/python311 to lang/python312 for python311-3.11.14? [y/N]:
y Enter で応えます。
env BATCH=yes portupgrade -f python311 -o lang/python312
これで、「python」本体は、「python3.11」から「python3.12」へアップグレードされます。
シンボリックリンクは、はりなおします。
「root」ユーザ権限で。
rm /usr/local/bin/python
ln -s /usr/local/bin/python3.12 /usr/local/bin/python
確認。
python --version
Python 3.12.12
5. 依存パッケージ
他の「ports」がどれくらいあるかちゅうと。
pkg version -v | grep py311 | wc -l
117
117個もありますな。
で。
pkg version -v | grep py311
py311-Babel-2.17.0_1 = up-to-date with index
py311-CommonMark-0.9.1_2 = up-to-date with index
py311-Jinja2-3.1.6 = up-to-date with index
・・・ 略 ・・・
py311-typogrify-2.1.0 = up-to-date with index
py311-urllib3-2.6.2,1 = up-to-date with index
py311-wheel-0.45.1 = up-to-date with index
ここからは、やっちゃだめ。
これらを再インストールします。
まず・・・。
env BATCH=yes portmaster -r python
===>>> pkg-message for python312-3.12.12_3
On install:
Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:
py312-gdbm databases/py-gdbm@py312
py312-sqlite3 databases/py-sqlite3@py312
py312-tkinter x11-toolkits/py-tkinter@py312
===>>> Done displaying pkg-message files
q で抜けます。
この後、「ChatGPT」軍曹にのせられて。
pkg delete -y 'py311-*'
しちゃったマシンがありましたが、これは大失敗、インストール済のモジュールがぐちゃぐちゃになってしまいました。
地道にやるしかないようです。
結局、「python」に依存する多くのプログラムがアンインストールされてしまって、再インストールするのに丸一日かかっちゃいました。
ここまで、やっちゃだめです。
以下の順に。
/usr/ports/devel/py-build
/usr/ports/devel/py-setuptools
/usr/ports/devel/py-wheel
/usr/ports/devel/py-trove-classifiers
/usr/ports/net/py-urllib3
/usr/ports/converters/py-webencodings
/usr/ports/textproc/py-smartypants
/usr/ports/textproc/py-typogrify
/usr/ports/devel/py-typing-extensions
/usr/ports/security/py-truststore
/usr/ports/lang/cython3
/usr/ports/net/py-trio
/usr/ports/devel/py-babel
/usr/ports/textproc/py-towncrier
/usr/ports/devel/py-toolz
/usr/ports/textproc/py-toml
/usr/ports/textproc/py-sphinxcontrib-serializinghtml
/usr/ports/textproc/py-sphinxcontrib-qthelp
/usr/ports/textproc/py-sphinxcontrib-jsmath
/usr/ports/textproc/py-sphinxcontrib-htmlhelp
/usr/ports/textproc/py-sphinxcontrib-devhelp
/usr/ports/textproc/py-sphinxcontrib-applehelp
/usr/ports/textproc/py-sphinx_rtd_theme
/usr/ports/textproc/py-markdown
/usr/ports/textproc/py-sphinx-markdown-tables
/usr/ports/www/py-soupsieve
/usr/ports/devel/py-sortedcontainers
/usr/ports/net/py-socksio
/usr/ports/textproc/py-snowballstemmer
/usr/ports/devel/py-sniffio
/usr/ports/devel/py-six
/usr/ports/devel/py-setuptools-rust
/usr/ports/devel/py-semantic-version
/usr/ports/devel/py-pyyaml
/usr/ports/devel/py-pytz
/usr/ports/textproc/py-python-augeas
/usr/ports/devel/meson
/usr/ports/textproc/gtk-doc
/usr/ports/textproc/py-pygments
/usr/ports/devel/py-pytest
/usr/ports/devel/meson-python
/usr/ports/math/py-numpy
/usr/ports/lang/cython
/usr/ports/textproc/py-pystemmer
/usr/ports/net/py-pysocks
/usr/ports/devel/py-pyproject-metadata
/usr/ports/devel/py-pyproject-hooks
/usr/ports/mail/py-pymilter
/usr/ports/www/py-pylsqpack
/usr/ports/devel/py-pycparser
/usr/ports/devel/py-pyasn1-modules
/usr/ports/devel/py-pyasn1
/usr/ports/sysutils/py-ptyprocess
/usr/ports/databases/py-psycopg2
/usr/ports/devel/py-poetry-core
/usr/ports/devel/py-pluggy
/usr/ports/devel/py-pathspec
/usr/ports/devel/py-parsedatetime
/usr/ports/devel/py-packaging
/usr/ports/devel/py-outcome
/usr/ports/devel/py-multipledispatch
/usr/ports/textproc/py-mdurl
/usr/ports/devel/py-maturin
/usr/ports/textproc/py-markupsafe
/usr/ports/devel/py-lxml
/usr/ports/devel/py-libevdev
ここまでやって、これ以降は、下記の要領でアップロードいたしました。
env BATCH=yes portupgrade -f py311-... -o py312-...
地道でもこれが一番、確実なような気がします。
今度、この一連の流れをスクリプト化したいな・・・。