FreeBSD - メンテナンス・トラブルシュート - Python - python3.7 → python3.9

 クラウディア
1. 概要
2. /etc/make.conf 編集
3. アップグレード
4. 依存パッケージ
5. python3.7 削除
6. トラブルシュート

1. 概要

 2022年3月31日ことです。  特に促されてはいないものの、別途、問題も発生しているので、ついでに、「python」のバージョンをあげようと思った次第です。  で、現在の「python」のバージョンをみてみると

$ python --version
Python 3.7.13
 あれ?前ページの要領で、「python3.8」へアップグレードしたつもりでいたのですが・・・まぁいいや。  で、アップグレードするのは何にしようかと思って見てみると

$ ls -dl /usr/ports/lang/python*
/usr/ports/lang/python
/usr/ports/lang/python-doc-html
/usr/ports/lang/python-doc-pdf-a4
/usr/ports/lang/python-doc-pdf-letter
/usr/ports/lang/python-doc-text
/usr/ports/lang/python-mode.el
/usr/ports/lang/python-tools
/usr/ports/lang/python2
/usr/ports/lang/python27
/usr/ports/lang/python3
/usr/ports/lang/python310
/usr/ports/lang/python311
/usr/ports/lang/python37
/usr/ports/lang/python38
/usr/ports/lang/python39
 とまぁ、最新は「python3.11」らしいが・・・。  「ruby」でリビジョンが、1桁から2桁になったときに、痛い目をみているので、いまんとこは1桁に収めたい・・・。  ちゅうことで、「python3.9」へアップグレードしようと思います。

2. /etc/make.conf 編集


vi /etc/make.conf

DEFAULT_VERSIONS+=python=3.7 python3=3.7
 を書き換えます。

DEFAULT_VERSIONS+=python=3.9 python3=3.9

3. アップグレード


portupgrade -f python37 -o lang/python39
pkg set -o lang/python37:lang/python39
 2つ目のコマンドは

Change origin from lang/python37 to lang/python39 for python37-3.7.13? [y/N]:
 ときいてきますので、y Enter で応えます。  と、ここまでやって、前ページを見なおして、まずいのがわかりました。

vi /etc/make.conf
 で、いったん

DEFAULT_VERSIONS+=python=3.9 pythonr3=3.9
 をコメントアウトして

cd /usr/ports/lang/python3
make deinstall clean

vi /etc/make.conf
 コメントアウトしたものを復活させて  (オプションはデフォルトのままにしています)

cd /usr/ports/lang/python39
make deinstall clean
make
make install
 もう一回。

portupgrade -rR python
 確認します。

$ pkg version -v | grep python
python27-2.7.18_1                  =   up-to-date with index
python37-3.7.13                    =   up-to-date with index
python39-3.9.12                    =   up-to-date with index
 前回に比べて、すっきりしております。  シンボリックリンクは、はりなおさないとまずいようです。  「root」ユーザ権限で。

rm /usr/local/bin/python
ln -s /usr/local/bin/python3.9 /usr/local/bin/python
 ログインユーザで確認します。

$ python --version
Python 3.9.12

4. 依存パッケージ

 後は、他のパッケージのアップグレードの際、競合や衝突が発生する都度、対処していくしかないかな・・・。  まずは、「python3.7」でインストールしていたパッケージを探して

$ pkg version -v | grep py37
py37-Babel-2.9.1                   ?   orphaned: devel/py-babel
root@ns.sing.ne.jp /usr/ports/devel/py-pip > pkg version -v | grep py37
py37-Babel-2.9.1                   ?   orphaned: devel/py-babel
py37-CommonMark-0.9.1              ?   orphaned: textproc/py-CommonMark
py37-Jinja2-3.0.1                  ?   orphaned: devel/py-Jinja2
py37-acme-1.22.0,1                 ?   orphaned: security/py-acme
py37-alabaster-0.7.12              ?   orphaned: textproc/py-alabaster
py37-appdirs-1.4.4                 ?   orphaned: devel/py-appdirs
py37-beaker-1.11.0                 ?   orphaned: www/py-beaker
py37-beautifulsoup-4.10.0          ?   orphaned: www/py-beautifulsoup
py37-certbot-1.22.0,1              ?   orphaned: security/py-certbot
py37-certifi-2021.10.8             ?   orphaned: security/py-certifi
py37-cffi-1.15.0                   ?   orphaned: devel/py-cffi
py37-chardet-4.0.0,1               ?   orphaned: textproc/py-chardet
py37-colorful-0.5.4                ?   orphaned: devel/py-colorful
py37-configargparse-1.5.3          ?   orphaned: devel/py-configargparse
py37-configobj-5.0.6_1             ?   orphaned: devel/py-configobj
py37-country-22.3.5                ?   orphaned: devel/py-country
py37-cryptography-3.3.2            ?   orphaned: security/py-cryptography
py37-cryptography-vectors-3.4.8    ?   orphaned: security/py-cryptography-vectors
py37-cython-0.29.28                =   up-to-date with index
py37-distro-1.7.0                  ?   orphaned: sysutils/py-distro
py37-docutils-0.17.1,1             ?   orphaned: textproc/py-docutils
py37-future-0.18.2                 ?   orphaned: devel/py-future
py37-google-i18n-address-2.5.0     ?   orphaned: devel/py-google-i18n-address
py37-html5lib-1.0.1                ?   orphaned: www/py-html5lib
py37-idna-2.10                     ?   orphaned: dns/py-idna
py37-imagesize-1.3.0               ?   orphaned: graphics/py-imagesize
py37-intervaltree-3.1.0            ?   orphaned: devel/py-intervaltree
py37-josepy-1.12.0                 ?   orphaned: security/py-josepy
py37-kitchen-1.2.6                 ?   orphaned: devel/py-kitchen
py37-libxml2-2.9.13_1              ?   orphaned: textproc/py-libxml2
py37-lxml-4.8.0                    ?   orphaned: devel/py-lxml
py37-mako-1.0.14_1                 ?   orphaned: textproc/py-mako
py37-markupsafe-2.1.0              ?   orphaned: textproc/py-markupsafe
py37-numpy-1.20.3,1                =   up-to-date with index
py37-olefile-0.46                  ?   orphaned: devel/py-olefile
py37-openssl-20.0.1                ?   orphaned: security/py-openssl
py37-packaging-21.3                ?   orphaned: devel/py-packaging
py37-parsedatetime-2.6             ?   orphaned: devel/py-parsedatetime
py37-pillow-8.2.0_1                ?   orphaned: graphics/py-pillow
py37-pip-20.3.4                    ?   orphaned: devel/py-pip
py37-prettyprinter-0.18.0_1        ?   orphaned: devel/py-prettyprinter
py37-psycopg2-2.9.3                ?   orphaned: databases/py-psycopg2
py37-pycparser-2.21                ?   orphaned: devel/py-pycparser
py37-pyflakes-2.4.0                ?   orphaned: devel/py-pyflakes
py37-pygments-2.9.0                ?   orphaned: textproc/py-pygments
py37-pyparsing-3.0.7               ?   orphaned: devel/py-pyparsing
py37-pyrfc3339-1.1                 ?   orphaned: devel/py-pyrfc3339
py37-pysocks-1.7.1                 ?   orphaned: net/py-pysocks
py37-pystemmer-2.0.1               ?   orphaned: textproc/py-pystemmer
py37-pytest-runner-5.3.1           ?   orphaned: devel/py-pytest-runner
py37-pytz-2021.3,1                 ?   orphaned: devel/py-pytz
py37-recommonmark-0.5.0_2          ?   orphaned: textproc/py-recommonmark
py37-repoze.sphinx.autointerface-0.8 ?   orphaned: devel/py-repoze.sphinx.autointerface
py37-requests-2.25.1               ?   orphaned: www/py-requests
py37-requests-toolbelt-0.9.1_1     ?   orphaned: www/py-requests-toolbelt
py37-setuptools-57.0.0             =   up-to-date with index
py37-setuptools_scm-6.4.2          ?   orphaned: devel/py-setuptools_scm
py37-six-1.16.0                    ?   orphaned: devel/py-six
py37-snowballstemmer-2.2.0         ?   orphaned: textproc/py-snowballstemmer
py37-sortedcontainers-2.3.0        ?   orphaned: devel/py-sortedcontainers
py37-soupsieve-2.0.1               ?   orphaned: www/py-soupsieve
py37-sphinx-4.3.1,1                ?   orphaned: textproc/py-sphinx
py37-sphinx_rtd_theme-1.0.0        ?   orphaned: textproc/py-sphinx_rtd_theme
py37-sphinxcontrib-applehelp-1.0.2 ?   orphaned: textproc/py-sphinxcontrib-applehelp
py37-sphinxcontrib-devhelp-1.0.2   ?   orphaned: textproc/py-sphinxcontrib-devhelp
py37-sphinxcontrib-htmlhelp-2.0.0  ?   orphaned: textproc/py-sphinxcontrib-htmlhelp
py37-sphinxcontrib-jsmath-1.0.1    ?   orphaned: textproc/py-sphinxcontrib-jsmath
py37-sphinxcontrib-qthelp-1.0.3    ?   orphaned: textproc/py-sphinxcontrib-qthelp
py37-sphinxcontrib-serializinghtml-1.1.5 ?   orphaned: textproc/py-sphinxcontrib-serializinghtml
py37-tkinter-3.7.13_6              =   up-to-date with index
py37-toml-0.10.2                   ?   orphaned: textproc/py-toml
py37-tomli-1.2.3                   ?   orphaned: textproc/py-tomli
py37-urllib3-1.26.8,1              ?   orphaned: net/py-urllib3
py37-webencodings-0.5.1            ?   orphaned: converters/py-webencodings
py37-yaml-5.4.1                    ?   orphaned: devel/py-yaml
py37-zope.component-4.2.2          ?   orphaned: devel/py-zope.component
py37-zope.event-4.1.0              ?   orphaned: devel/py-zope.event
py37-zope.interface-5.3.0          ?   orphaned: devel/py-zope.interface
 うはぁ、たまらん。

pkg delete "py37-*"
 と「"」で囲めば、ワイルドカードが使えるのですが・・・これは、他の必要なものまで、アンインストールするようで・・・。  個別にアンインストールするしかないな。  下記は、あえて、いちいち、[y/N] をきくようにしています。  削除される一覧が表示されますので、問題なければ y Enter で答えます。

pkg delete -y py37-pip
pkg delete py37-Babel
pkg delete py37-pygments
pkg delete py37-docutils
pkg delete py37-cython
 「pip」でインストールしたものは、個別にインストールするしかないな・・・。  わたしが使っているものをインストールします。  まずは、「pip」。  これは、「ports」でインストール。

cd /usr/ports/devel/py-pip
make
make install
 このとき、気になるメッセージがあったので記録しておきます。

===>  Installing for py39-pip-20.3.4
===>  Checking if py39-pip is already installed
===>   Registering installation for py39-pip-20.3.4
Installing py39-pip-20.3.4...
pip MUST ONLY be used:

 * With the --user flag, OR
 * To install or manage Python packages in virtual environments

Failure to follow this warning can and will result in an inconsistent
system-wide Python environment (LOCALBASE/lib/pythonX.Y/site-packages) and
cause errors.

Avoid using pip as root unless you know what you're doing.
 他にも「ports」でインストールするもの

cd /usr/ports/databases/py-psycopg2
make
make install

5. python3.7 削除

 2022年4月4日。

$ pkg version -vl "<"
php80-composer2-2.2.9              <   needs updating (index has 2.3.3)
vim-8.2.4485                       <   needs updating (index has 8.2.4669)
 てなことになっておって。  「vim」をアップグレードしようとすると

$ portupgrade -rR vim
[Reading data from pkg(8) ... - 472 packages found - done]
[Gathering depends for editors/vim ................................................................................ done]
** Duplicated origin - lang/python39: python37-3.7.13 python39-3.9.12
** Run 'pkgdb -F' to interactively fix them.
 てなことになります。

$ ls -la /usr/local/bin/py*
lrwxr-xr-x 1 root wheel   11  3月 31 14:21 /usr/local/bin/pybabel -> pybabel-3.9
-rwxr-xr-x 1 root wheel  960  3月 31 14:21 /usr/local/bin/pybabel-3.9
-rwxr-xr-x 1 root wheel   84  7月  1  2021 /usr/local/bin/pydoc2.7
-rwxr-xr-x 1 root wheel   84  3月 31 13:08 /usr/local/bin/pydoc3.7
-rwxr-xr-x 1 root wheel   84  3月 31 13:28 /usr/local/bin/pydoc3.9
lrwxr-xr-x 1 root wheel   12  3月 21 10:39 /usr/local/bin/pyflakes -> pyflakes-3.7
-rwxr-xr-x 1 root wheel  971  3月 21 10:39 /usr/local/bin/pyflakes-3.7
lrwxr-xr-x 1 root wheel   14  3月 31 14:38 /usr/local/bin/pygmentize -> pygmentize-3.9
-rwxr-xr-x 1 root wheel  975  3月 31 14:38 /usr/local/bin/pygmentize-3.9
lrwxr-xr-x 1 root wheel   24  3月 31 13:38 /usr/local/bin/python -> /usr/local/bin/python3.9
lrwxr-xr-x 1 root wheel   24  3月  5  2018 /usr/local/bin/python2 -> /usr/local/bin/python2.7
-r-xr-xr-x 1 root wheel 5872  7月  1  2021 /usr/local/bin/python2.7
-r-xr-xr-x 1 root wheel 1769  7月  1  2021 /usr/local/bin/python2.7-config
-r-xr-xr-x 2 root wheel 5768  3月 31 13:07 /usr/local/bin/python3.7
lrwxr-xr-x 1 root wheel   17  3月 31 13:08 /usr/local/bin/python3.7-config -> python3.7m-config
-r-xr-xr-x 2 root wheel 5768  3月 31 13:07 /usr/local/bin/python3.7m
-r-xr-xr-x 1 root wheel 2936  3月 31 13:08 /usr/local/bin/python3.7m-config
-r-xr-xr-x 1 root wheel 5736  3月 31 13:28 /usr/local/bin/python3.9
-r-xr-xr-x 1 root wheel 3153  3月 31 13:28 /usr/local/bin/python3.9-config
-rwxr-xr-x 1 root wheel  441  3月 31 13:08 /usr/local/bin/pyvenv-3.7
 ん~。「python2.7」は、「python2」の系列に依存するものが、未だにいるから、残さなければならぬとして。  「python3.7」は、削除するべきのようです。

cd /usr/ports/lang/python37
make deinstall clean
 これで、「vim」がアップグレードできるかと思いきや・・・。  先ほどの現象は出なくなったものの、

[Reading data from pkg(8) ... - 471 packages found - done]
[Gathering depends for editors/vim ................................................................................ done]
[Exclude up-to-date packages ............................. done]
--->  Upgrading 'vim-8.2.4485' to 'vim-8.2.4669' (editors/vim)
--->  Building '/usr/ports/editors/vim'
===>  Cleaning for python39-3.9.12
===>  Cleaning for python39-3.9.12
===>  Cleaning for vim-8.2.4669
/!\ ERROR: /!\

Ports Collection support for your FreeBSD version has ended, and no ports are
guaranteed to build on this system. Please upgrade to a supported release.

No support will be provided if you silence this message by defining
ALLOW_UNSUPPORTED_SYSTEM.

*** Error code 1

Stop.
make[1]: stopped in /usr/ports/editors/vim
*** Error code 1

Stop.
make: stopped in /usr/ports/editors/vim
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20220404-12611-1ymist4 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=vim-8.2.4485 UPGRADE_PORT_VER=8.2.4485 make
** Fix the problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
        ! editors/vim (vim-8.2.4485)    (unknown build error)
 先ほどの現象は出なくなったものの・・・。  「Ports Collection support for your FreeBSD version has ended」。  おおそうか、対象のマシンは、「FreeBSD 12.2 RELEASE」を使用しておるのですが、これは、2022年3月31日でサポートが終了しているのであった。  早速、オペレーティングシステム自体をアップグレードせねば。  まぁ、これは、別のページで。

6. トラブルシュート

 実は、この後、「certbot」という「python」のモジュールにトラブルが起きたのですが、それに関しては、「メンテナンス・トラブルシュート - SSL 無料の証明書を取得 - certbot インストール」をご参照ください。
ハイスピードプランメンズミレットU-NEXTPoint anytimeStar Naming Gift