😎

venvが反映されない!?ubuntu24へのバージョンアップ後に。その応急処置。

2024/11/03に公開

0. 応急処置

venvで作ったフォルダに入っているpython3へのリンクを張り直しました。

rm ./環境名/bin/python3
ln -s ~/.pyenv/versions/3.10.12/bin/python3 ./環境名/bin/python3

1. はじめに

最近、ubuntuを22.4から24.4にバージョンアップしました。
そうしたら、過去にvenvで作った仮想環境が反映されない現象が発生しました。
つまらない応急処置ですが、備忘録として残します。

2. 経緯

ubuntu 24.4.01に更新しました。
pythonのバージョンが3.10.12から3.12.3になりました。

$ python3 -V
Python 3.12.3

実は事前に、pyenvで3.10.12を呼び出せるようにしていました。これで安心。。。。

$ pyenv global 3.10.12
$ python3 -V
Python 3.10.12

venvでの仮想環境を反映して、既にpipで入れてあるpytorchをimport。。。!?

$ source 環境名/bin/activate
(環境名)$ python3
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'

pytorchが無い?

(環境名)$ python3 -V
Python 3.12.3

さっき、3.10.12にしたはずなのに、なぜ再び 3.12.3 に?

torchが呼べない原因は、ここにありそうと考えました。

$ cd 環境名/bin
$ ls -la
drwxrwxr-x 2 userb userb 4096 Nov 27  2023 .
drwxrwxr-x 5 userb userb 4096 Nov 27  2023 ..
-rw-r--r-- 1 userb userb 2004 Nov 27  2023 activate
-rw-r--r-- 1 userb userb  930 Nov 27  2023 activate.csh
-rw-r--r-- 1 userb userb 2210 Nov 27  2023 activate.fish
-rw-r--r-- 1 userb userb 9033 Nov 27  2023 Activate.ps1
(中略)
-rwxrwxr-x 1 userb userb  247 Nov 27  2023 pip
-rwxrwxr-x 1 userb userb  247 Nov 27  2023 pip3
-rwxrwxr-x 1 userb userb  242 Nov 27  2023 pip3.10
lrwxrwxrwx 1 userb userb    7 Nov 27  2023 python -> python3
lrwxrwxrwx 1 userb userb   16 Nov 27  2023 python3 -> /usr/bin/python3
lrwxrwxrwx 1 userb userb    7 Nov 27  2023 python3.10 -> python3

ここが原因でした。

python3 -> /usr/bin/python3

つまり、3.12.3に更新されたpython3を呼び出しいます。
これは、ubuntu22では3.10.12でしたが、ubuntu24では3.12.3になっているのです。

本来は、仮想環境を構築し直すのが良いようですが( venv --upgrade 環境名 では改善されず)、応急処置として次のように行いました。

$ rm python3
$ ln -s /home/ユーザ名/.pyenv/versions/3.10.12/bin/python3 python3

最後に確認。

$ source 環境名/bin/activate
(環境名)$ python3 -V
Python 3.10.12

この後、pytorchも無事動きました。

3. おわりに

それまで無難に動いていたマシンのOSバージョンアップには勇気が必要です。
しかし、OSが古くなると少なからず問題が生じることがありますので、いつかはバージョンアップか、リプレースかの選択に迫られます。過去の資産がある場合、それらが使えることが重要になりますし、動かすための作業時間を生み出す勇気が必要になる訳です。
今回は、バージョンアップしつつも、過去のスクリプトをすぐに動かしたいということで、応急処置を行いました。

なお、venvを使う場合は、予めpyenvでpythonのバージョンを固定しておくのが無難だろうと思います。今後はそうしようと思いました。

A. 参考

venvについて理解が深まりました。

https://atmarkit.itmedia.co.jp/ait/articles/2302/14/news026.html

https://qiita.com/t_aks/items/70e23807c1ffd747bf24

Discussion