0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

仮想ターミナルで起動したconda仮想環境でモジュールのimportエラー

Posted at

症状の概略

GNU Screenなどの仮想端末のなかでconda仮想環境を起動したとき、仮想環境のsite-packagesにPATHが通っておらず、あらゆるモジュールがimportエラー(ModuleNotFoundError)してしまう。

対処法

仮想端末を起動するときはconda deactivateしてある状態でセッションを張ること!
つまり、

(base) $ screen -S example-terminal # <- 新しい仮想端末を起動するコマンド
#  example-terminalセッションの中で
(base) $ conda activate hoge
(hoge) $ python text.py

はOKで、

(base) $ conda activate fuga # <- あらかじめconda仮想環境を起動してしまっている!!これがダメ!!
(fuga) $ screen -S example-terminal # <- 新しい仮想端末を起動するコマンド
#  example-terminalセッションの中で
(base) $ conda activate hoge
(hoge) $ python text.py

は動かない、ということのようです。

Related Report

ある程度、問題の特定ができたので調べてみると、似たようなissueが見つかりました。

stack overflow | screen inside the conda environment doesnt work

読むと「.bashrcにPATHが通ってないからだぞ」という指摘をしている人がいますが、私の環境ではちゃんと通してあります。
最後の人が

What you can do is start screen first, and then activate the conda environment conda activate my_env

って言っているように、上記の対処がやはり根本的な解消法かなと思います。

症状に気が付いたきっかけ

リモートで作業しているときSSH接続が切れてもプロセスが強制終了しないように、GNU Screenやtmuxを使って作業している人は多いと思います。
(ただし私はscreen派ですのでtmuxのことはほとんど分かりません。)

ところがある日、いつも通りVSCodeのターミナルからpythonスクリプトを実行したらModuleNotFoundErrorのエラーが!

でもipythonを立ち上げてimportコマンドをベタ打ちしてもエラーにならないし、VSCodeのデバッガーの中でも特にエラーにはなりません。明らかにターミナルの中のscreenセッションが悪さをしてそう、と思っていくつかのケースを試したら判明した、という経緯です。

結構気づきにくい気がしたので、参考になれば嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?