今回は FreeBSD で Python のデフォルトバージョンを変えた時のトラブルの話を書こう。
何をしたかと言うと,FreeBSD 上のアプリケーションとしていろいろあるのだが,Python もインストールされている。 Python は Python 自体を使いたいというよりは,他のアプリケーションとの依存関係で勝手にインストールされる。 ついこの間まで,なぜかうちの FreeBSD の python の default version は 3.8 に指定してあった。 もう 3.11 が出てるのにね。でも,まぁ,現時点では 3.9 がまだ FreeBSD 上でのデフォルトとなってるから,そこまでひどくはないと思うけど…。 ちなみに default version が 3.8 から 3.9 になったのは 2022/6/26 なんだけどね (現在は 2023/3 末)。
なぜ急に default version をあげようと思ったかというと,ふと /usr/ports/UPDATING で python で検索したら,2022/6/26 に python の default version を 3.8 から 3.9 にした,と書いてあったから。 そこで,その 2022/6/26 の記載に従って処理をしてみた。
概略は,
(1) /etc/make.conf で python のデフォルトを指定してあったのをコメントアウトした。
(2) root 権限で以下を実行した。
# portmaster -o lang/python39 python38 # REINSTALL="$(pkg info -o "*py38*" | awk '{printf "%s ", $2}')" # pkg delete -f "*py38*" # portmaster $REINSTALL # REBUILD=$(pkg query -g "%n:%dn" '*' | grep py3 | grep -v py39 | cut -d : -f 1 | sort -u) # portmaster $REBUILD # REBUILD2=$(pkg list | grep python-38 | xargs pkg which | awk '{print $6}' | sort -u) # portmaster $REBUILD2(3) 最後に "pkg remove python38" を実行して,/usr/local/lib/python3.8/ ディレクトリになにか残ってたら手動で消す。
というもの。
で,エラーが起こったのは(まぁ,当然といえば当然だが)(2) の実行時。その中でも「portmaster $REINSTALL」ってのを実行中にエラーがでた。 これは,直前で python 3.8 で作られたアプリケーションを消し,それらを python 3.9 で(デフォルトで)作り直す,というコマンド。 それが最後まで実行されなかった。見ると途中に「ERROR」という文字が見える。 portmaster というコマンドは,複数のアプリケーションのアップデートを順にやってくれるが,どれかのアップデートでエラーが起こると,その先は実行してくれない。 今回見ていると,どうも「/usr/ports/devel/py-gobject3/」というアプリケーションのアップデート時にエラーを吐いていた。 エラーメッセージ(一部)はこんなんやった。
ERROR: Unhandled python OSError. This is probably not a Meson bug, but an issue with your build environment. WARNING: Running the setup command as `meson [options]` instead of `meson setup [options]` is ambiguous and deprecated. ===> Script "configure" failed unexpectedly. Please report the problem to desktop@FreeBSD.org [maintainer] and attach the "/var/ports/usr/ports/devel/py-gobject3/work-py39/pygobject-3.42.2/_build/meson-logs/meson-log.txt" including the output of the failure of your make command. Also, it might be a good idea to provide an overview of all packages installed on your system (e.g. a /usr/local/sbin/pkg-static info -g -Ea). *** Error code 1
見ると,「/usr/ports/devel/py-gobject3/」という文字列が目に入った。つまり「py-gobject3」のアップデートに失敗している。 そこで,とりあえず環境変数「$REINSTALL」の中身を「echo $REINSTALL」として表示させ,py-gobject3 以外を portmaster でアップデートするとうまくいった。 しかし,その後のプロセスで py-gobject3 を使うみたいで再びエラーがでた。
仕方ないのでネットワークのお世話になり,検索をかけると,https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=238254 というページにたどり着いた。読んでみると,どうも「/usr/ports/devel/gobject-introspection/」をインストールしなおせ,と書いてある。 「pkg info -aI」として調べると,確かに「gobject-introspection-1.76.1,1」がインストールされていた。
そこで「/usr/ports/devel/gobject-introspection/」(gobject-introspection-1.76.1,1)をインストールし直してから (make install として,重複してるとエラーがでたら make deinstall install clean とした),「py-gobject3」を portmaster でアップデートしたらうまくいった。 何がおかしいのかよくわからないが,時々起こる似たような現象がおこる。何かのサブルーチンが最新になってなかった,ということみたいやけど,それ以上はいいことにしてしまった…。
0 件のコメント:
コメントを投稿