venvが反映されない!?ubuntu24へのバージョンアップ後に。その応急処置。
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について理解が深まりました。
Discussion