2
1

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を使えるのに、別の環境だと突然使えなくなった…」
最近、この件について時間を溶かしている人を多く聞くので、こちらの記事をまとめました。

問題となるエラーは、condaをactivateした際に発生する以下のものです。

Traceback (most recent call last):
  File "/work/hoge/**/miniconda3/bin/conda", line 12, in <module>
    from conda.cli import main
ImportError: No module named conda.cli

/work/hoge/**/miniconda3/bin/pythonを立ち上げてcondaをimportしてみると、問題なく実行できます。これは、一体どういうことなのでしょうか?

解決法

先に問題の解決方法を挙げますと、以下のどちらかを選んでください。

  • 仮想環境を構築するパスの長さを浅く(bin/python含めて127文字以下に)する
  • 最新のOSにアップデートする

(他にも良い方法がありましたらお知らせください)

原因

エラーメッセージに表示されていたファイルの1行目を見てみてください。

$ head -n 1 /work/hoge/**/miniconda3/bin/conda

ここで、もしかすると以下のように表示されていませんか?

#!/usr/bin/env python

本来ならば、ここは

#!/work/hoge/**/miniconda3/bin/python

となっていて欲しいはずです。もしかして、あなたのケースでは、**の部分がかなり長い文字列になっていないでしょうか? 実は、shebangの長さは決まっていて、それ以上長いとOSが処理することができません。そのため、自動で#!/usr/bin/env pythonに書き換わる仕様になっているようです(どちらかというと、エラーを吐いて落ちて欲しいですが…)。

そのshebangの最大長は、以下で確認することができます。

$ grep BINPRM_BUF_SIZE /usr/include/linux/binfmts.h

Ubuntu 22.04ならこの値は256になっていますが、古いOSだと128になっていることが多いです。このため、上記の問題を解決するためには、OSをアップデートするか、そもそものパスを短くすれば良いということになります。もちろん、最新のOSでもshebangの最大長はありますので、この長さを超えないようにする必要があります。パスの最大長はBINPRM_BUF_SIZEより1だけ小さくなりますが、エクスクラメーションマーク(!)の分によるものかと思われます。

終わりに

いかがでしたでしょうか。個人的には、もう少し周知されても良い内容なのではないかと思います。GitHubの方ではissueが立っているようなので、今後何かしらの進展があるかも知れません。

初めての記事でお見苦しいところがあるかも知れませんが、皆様の活動の一助となれば幸いです。
ここまでお読みくださり、ありがとうございました。

2023年7月3日 満月

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?