web-dev-qa-db-ja.com

pipインストールで「Xのホイールの構築に失敗しました」の意味は何ですか?

これはSOで本当に人気のある質問ですが、私が調べた多くの答えのどれも、このエラーが本当に意味するものと、それがなぜ起こるのかを明確に説明していません。

混乱の原因の1つは、(たとえば)pip install pycparserを実行すると、最初にエラーが発生することです。

Failed building wheel for pycparser

次に、パッケージがあったことを示すメッセージが続きます。

Successfully installed pycparser-2.19


# pip3 install pycparser

Collecting pycparser
  Using cached https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz
Building wheels for collected packages: pycparser
  Running setup.py bdist_wheel for pycparser ... error
  Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-g_v28hpp/pycparser/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-__w_f6p0 --python-tag cp36:
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    ...
    File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2349, in resolve
      module = __import__(self.module_name, fromlist=['__name__'], level=0)
  ModuleNotFoundError: No module named 'wheel.bdist_wheel'

  ----------------------------------------
  Failed building wheel for pycparser
  Running setup.py clean for pycparser
Failed to build pycparser
Installing collected packages: pycparser
  Running setup.py install for pycparser ... done
Successfully installed pycparser-2.19

ここで何が起こっているのですか?

(何かが失敗するが、それでもインストールされる可能性があり、このパッケージが正しく機能することを信頼できるかどうかを理解したいのですが?)

これまでのところ、私が見つけた最良の部分的な説明は this です。


BTW /解決策

上記の問題の解決策は、ほとんどの場合、次を使用してcachedコピーを無効にすることです:pip install <package> --no-cache-dir

30
not2qubit

なぜなら、私自身がこれについて言及している人はいないようです。上記の問題に対する私自身の解決策は、ほとんどの場合、pip install <package> --no-cache-dirを使用してcachedコピーを無効にすることです。

7
not2qubit

昨日、同じエラーが発生しました:Failed building wheel for hddfancontrolを実行したときにpip3 install hddfancontrol。結果はFailed to build hddfancontrolでした。原因はerror: invalid command 'bdist_wheel'およびRunning setup.py bdist_wheel for hddfancontrol ... errorでした。エラーは、次を実行することで修正されました。

 pip3 install wheel

ここ から)

または、「ホイール」は here から直接ダウンロードできます。ダウンロードしたら、次を実行してインストールできます。

pip3 install "/the/file_path/to/wheel-0.32.3-py2.py3-none-any.whl"
14
Matthew Wai

(pipメンテナはこちら!)

パッケージがホイールでない場合、pipはそのホイールを(setup.py bdist_wheel経由で)構築しようとします。何らかの理由でそれが失敗した場合、「pycparserの構築に失敗しました」というメッセージが表示され、pipは(setup.py install経由で)直接インストールにフォールバックします。

車輪ができたら、pipは車輪を正しく開梱して車輪を取り付けることができます。 pipは、できるだけ頻繁にwheelを介してパッケージをインストールしようとします。これは、ホイールを使用することのさまざまな利点(高速インストール、キャッシュ可能、コードを再実行しないなど)によるものです。


ここでのエラーメッセージは、wheelパッケージが欠落しているためです。これには、setup.py bdist_wheelでホイールを構築するために必要なロジックが含まれています。 (pip install wheelはそれを修正できます。)


上記は、現在デフォルトである従来の動作です。将来的にはデフォルトでPEP 517に切り替え、標準ベースのプロセスに移行します。また、そのためのビルドも分離されているため、デフォルトでこれらの環境にホイールがインストールされます。 :)

9
pradyunsg

パッケージ展開の観点からこの質問に対処すると役立つ場合があります。

PyPiにパッケージを公開する方法を説明するチュートリアルがたくさんあります。以下は私が使用したカップルです。


本物のpython

私の経験では、これらのチュートリアルのほとんどでは、ホイールではなくソースの.tarのみを使用しています。したがって、これらのチュートリアルを使用して作成されたパッケージをインストールするときに、「ホイールの構築に失敗しました」というエラーが表示されました。

後で、PyPi上のPython Software Foundationのドキュメント PSF Docs へのリンクを見つけました。セットアップとビルドのプロセスがわずかに異なり、実際にホイールファイルのビルドが含まれていることがわかりました。

公式に文書化された方法を使用した後、パッケージのインストール時にエラーが表示されなくなりました。

そのため、エラーは単に、開発者がプロ​​ジェクトをどのようにパッケージ化およびデプロイしたかという問題である可能性があります。 PyPiの使用方法を知っている私たちは誰もいませんでした。間違ったチュートリアルが発生した場合は、空白を埋めることができます。

私はそれがエラーの唯一の理由ではないと確信していますが、それが主な理由であると確信しています。

2
SteveJ