これは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
。
なぜなら、私自身がこれについて言及している人はいないようです。上記の問題に対する私自身の解決策は、ほとんどの場合、pip install <package> --no-cache-dir
を使用してcachedコピーを無効にすることです。
昨日、同じエラーが発生しました: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"
(pipメンテナはこちら!)
パッケージがホイールでない場合、pipはそのホイールを(setup.py bdist_wheel
経由で)構築しようとします。何らかの理由でそれが失敗した場合、「pycparserの構築に失敗しました」というメッセージが表示され、pipは(setup.py install
経由で)直接インストールにフォールバックします。
車輪ができたら、pipは車輪を正しく開梱して車輪を取り付けることができます。 pipは、できるだけ頻繁にwheelを介してパッケージをインストールしようとします。これは、ホイールを使用することのさまざまな利点(高速インストール、キャッシュ可能、コードを再実行しないなど)によるものです。
ここでのエラーメッセージは、wheel
パッケージが欠落しているためです。これには、setup.py bdist_wheel
でホイールを構築するために必要なロジックが含まれています。 (pip install wheel
はそれを修正できます。)
上記は、現在デフォルトである従来の動作です。将来的にはデフォルトでPEP 517に切り替え、標準ベースのプロセスに移行します。また、そのためのビルドも分離されているため、デフォルトでこれらの環境にホイールがインストールされます。 :)
パッケージ展開の観点からこの質問に対処すると役立つ場合があります。
PyPiにパッケージを公開する方法を説明するチュートリアルがたくさんあります。以下は私が使用したカップルです。
私の経験では、これらのチュートリアルのほとんどでは、ホイールではなくソースの.tarのみを使用しています。したがって、これらのチュートリアルを使用して作成されたパッケージをインストールするときに、「ホイールの構築に失敗しました」というエラーが表示されました。
後で、PyPi上のPython Software Foundationのドキュメント PSF Docs へのリンクを見つけました。セットアップとビルドのプロセスがわずかに異なり、実際にホイールファイルのビルドが含まれていることがわかりました。
公式に文書化された方法を使用した後、パッケージのインストール時にエラーが表示されなくなりました。
そのため、エラーは単に、開発者がプロジェクトをどのようにパッケージ化およびデプロイしたかという問題である可能性があります。 PyPiの使用方法を知っている私たちは誰もいませんでした。間違ったチュートリアルが発生した場合は、空白を埋めることができます。
私はそれがエラーの唯一の理由ではないと確信していますが、それが主な理由であると確信しています。