1. ホーム
  2. python

[解決済み] ImportError: Cython.Distutilsという名前のモジュールはありません。

2022-01-28 18:24:06

質問

Pythonのライブラリをインストールしようとすると、奇妙な問題が発生します。 zenlib を使用し、その setup.py ファイルを作成します。を実行すると setup.py ファイルでは、インポートエラーが発生し、次のようになります。

ImportError: Cython.Distutilsという名前のモジュールはありません`。

しかし、そのようなモジュールがあり、pythonコマンドラインで問題なくインポートすることができます。 なぜこのようなインポートエラーが発生するのでしょうか?

を使用していることが関係しているのではないかと思います。 Enthought Python ディストリビューション Ubuntu 12.04に付属のPython 2.7ではなく、事前にインストールしたPython 2.7を使用しています。

さらに背景を説明します。 setup.pyを実行しようとすると、こんな感じになります。

enwe101@enwe101-PCL:~/zenlib/src$ sudo python setup.py install
Traceback (most recent call last):
  File "setup.py", line 4, in <module>
    from Cython.Distutils import build_ext
ImportError: No module named Cython.Distutils

でも、コマンドラインからだとうまくいくんですよ。

>>> from Cython.Distutils import build_ext
>>> 
>>> from fake.package import noexist
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named fake.package

最初のimportはうまくいき、2番目のimportはエラーを投げることに注意してください。 setup.pyの最初の数行と比較してみてください。

#from distutils.core import setup
from setuptools import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import os.path

Ubuntu に付属する Python ではなく Enthought Python Distribution がデフォルトで実行されるように、bash の $PATH 環境変数を編集して先頭に追加しておきました。 ~/.bashrc で、最後の行にこれを追加してください。

export PATH=/usr/local/epd/bin:$PATH

で、実際に which python を吐き出します。 /usr/local/epd/bin/python ... 他に何を試せばいいのかわからず、自分のサイトのパッケージディレクトリに行き、( /usr/local/epd/lib/python2.7/site-packages にフルパーミッション(r,w,x)を与えてください。 Cython , Distutils , build_ext.py を、そして __init__.py ファイルを作成します。 おそらく試すのは愚かで、何も変わりませんでした。

次に何を試せばいいのか思いつかない!?何かアイデアはありますか?

解決方法は?

sudoが正しいpythonを取得できていません。これはUbuntuのsudoの既知の動作です。これを参照してください。 質問 をご覧ください。sudo が正しい python を呼び出すかどうか、フルパスで確認する必要があります。

sudo /usr/local/epd/bin/python setup.py install

を実行するか、以下のように(bashで)実行します。

alias sudo='sudo env PATH=$PATH'
sudo python setup.py install