web-dev-qa-db-ja.com

ImportError:Cython.Distutilsというモジュールはありません

Pythonライブラリzenlibsetup.pyファイルを使用してインストールしようとすると、奇妙な問題が発生します。 setup.pyファイルを実行すると、インポートエラーが発生します。

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

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

この問題は、Pythonを使用するのではなく、事前にインストールした Enthought Python Distribution を使用しているという事実に関係していると思われます。 Ubuntu 12.04に付属の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

最初のインポートが機能し、2番目のインポートがエラーをスローすることに注意してください。これを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ディストリビューションが、~/.bashrcを編集してbash $ PATH環境変数を先頭に追加することでデフォルトで実行されることを確認しました。これを最後の行として追加します。

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)を与えますCythonDistutilsbuild_ext.py、および__init__.pyファイルに。おそらく馬鹿げているが、何も変わらなかった。

次に何をしようか考えられません!?何か案は?

54
Edward Newell

あなたのSudoは正しいPythonを取得していません。これは、UbuntuでのSudoの既知の動作です。詳細は question をご覧ください。絶対パスを使用して、Sudoが正しいpythonを呼び出すことを確認する必要があります。

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

または、以下を実行して(bashで):

alias Sudo='Sudo env PATH=$PATH'
Sudo python setup.py install
18
tiago

Cythonをインストールします。

pip install cython
71
Martin Thoma

走る

which python

pythonシステムへのデフォルトも設定されているパスへのパスは、@ tiagoの次のメソッドに進みます。

Sudo <output of which python> setup.py install

8
ashley

Python3を使用する場合

Sudo apt-get install cython3

Python2を使用する場合

Sudo apt-get install cython

詳細は this で読むことができます

アドバイスを1つだけ受け取りました。virtualenvを作成します。これにより、pythonの1つのバージョンのみがあり、すべてのパッケージがローカルにインストールされます(システム全体ではありません)。
解決策の1つである必要があります。

5
Depado

CLI-pythonで、sysをインポートし、sys.pathの中身を確認します
その後、export PYTHONPATH=whatyougot

1
lolopop

現代に再びこれに走りました。解決策は簡単でした:

pip uninstall cython && pip install cython
1
Brad Pitcher

次のコマンドを実行すると、ubuntu 14.04で問題が解決しました。

Sudo apt-get install python-dev    
Sudo apt-get install libusb-1.0-0-dev
Sudo apt-get install libsystemd-daemon-dev
Sudo pip install cython

このリンクは私を助けました: https://github.com/trezor/python-trezor/issues/4

1
N. S.

それは簡単だ。

install cython最初にパッケージ。

Pythonに組み込まれているeasy_installがアップグレードされます。

0
ian