🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

2回答

38127閲覧

ライブラリをインストールする際に発生する「wheel」エラーについて

ruuuu

総合スコア176

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

1グッド

0クリップ

投稿2021/01/19 02:51

編集2021/01/19 04:26

Failed building wheel for sendmailこちらのエラーについて疑問があり、質問させて頂きました。
こちらのエラーが発生した経緯ですが、ローカルでvenvにより仮想環境を作成し、pip installを使いライブラリをインストールし開発していた際には起こらなかったのですが、サーバー(ubuntu)にてgit clone し、venvを作成し、 pip install -r requirements.txtにてライブラリをインストールした際に発生してしまいました。
こちらの現象なのですが、ほとんど毎回ubuntuにて特定のライブラリをインストールした際に発生してしまっている状況です。
ネット検索で、エラー自体はpip install wheelとすることで解決できましたが、根本としてWheelを必要とする原因は何故なのでしょうか。
どなたか、ご助言頂けましたら幸いです

追記

以下のメッセージもエラーとして出力されていました。

error: invalid command 'bdist_wheel'

study_111👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/01/19 03:08

自身で調べた事はなんでしょうか?????
hoshi-takanori

2021/01/19 03:12

wheel というのはネイティブ (主に C で書かれた) ライブラリのことです。コンパイラが入ってないかライブラリが足りなくてビルドに失敗してるのでは。
tiitoi

2021/01/19 03:16

「Failed building wheel for sendmail」でビルドエラーになった原因が他に出力されませんでしたか?エラーメッセージはそれだけですか?
ruuuu

2021/01/19 04:27

>「Failed building wheel for sendmail」でビルドエラーになった原因が他に出力されませんでしたか?エラーメッセージはそれだけですか? こちらですが、業務の都合上全ては記載できないのですが、一部追記しました。
tiitoi

2021/01/19 04:30

> 根本としてWheelを必要とする原因は何故なのでしょうか。 その OS、Python のバージョンに適合したビルド済みのバイナリがなければ、wheel をつかてソースからビルドするようになってます。どの環境でも wheel と C/C++ のビルド環境は整えておいたほうがいいでしょう。
ruuuu

2021/01/19 04:36

>その OS、Python のバージョンに適合したビルド済みのバイナリがなければ、wheel をつかてソースからビルドするようになってます。 ありがとうございます。 しかし、少々疑問なのはローカル環境でも「venv」を使用し、開発環境を作成しているにも関わらず何故サーバー側(ubuntu)でのみエラーが発生してしまうのかといった点なのですよね...
tiitoi

2021/01/19 04:37

そのローカル環境とサーバー環境は OS や Python のバージョンが完全に同一なのですか?
ruuuu

2021/01/19 04:40 編集

Pythonのバージョンはpyenvにより揃えていますが、OSは違います。 こちら、「venv」により仮想環境を作成している為、OSなどの違いは関係してこないのではないでしょうか...?
tiitoi

2021/01/19 04:41

回答のほうで整理して書きますね
ruuuu

2021/01/19 04:45

>回答のほうで整理して書きますね ありがとうございます。 お手数をおかけし、申し訳ないです。 よろしくお願いします。
quickquip

2021/01/19 04:49

> しかし、少々疑問なのはローカル環境でも「venv」を使用し、開発環境を作成しているにも関わらず何故サーバー側(ubuntu)でのみエラーが発生してしまうのか それを疑問だと思っているなら、"ローカル環境"が何なのか、Ubuntuのバージョンがなんなのか、Pythonのバージョンがなんなのかどうインストールしたものなのか等を書かないのはなぜでしょう。 requirements.txt にどう書いてあるのかもわかりません。
quickquip

2021/01/19 08:08 編集

質問の意図としては問題ないのでしょうけれど、sendmail がPure Pythonなライブラリで「C/C++のコードをビルドしていない」はずなのにエラーがでる理由は気になります……(そういう問題が残っていることを質問者さんが認識しているかも気になります)(私の勘違いの可能性もありますが条件が不明で調査できません。その調査できないことが気になります)(単純にpipが古いだけ? という感じはあります)
guest

回答2

0

ベストアンサー

Pythonのバージョンはpyenvにより揃えていますが、OSは違います。

こちら、「venv」により仮想環境を作成している為、OSなどの違いは関係してこないのではないでしょうか...?

Python のコードのみで書かれたライブラリであればビルドは不要ですが、C/C++ などビルドが必要なコードに依存している Python のライブラリは、その環境に応じたバイナリが必要です。
例えば、Windows で動く exe 形式のバイナリを Ubuntu に持っていっても動きません。OS が違うからです。
そのため、pip でインスールする際にその環境に適合したビルド済みのバイナリが存在すればそれをダウンロードしてくるだけですが、存在しない場合は wheel でソースをダウンロードしてビルドを試みます。

その際に「wheel が存在しない」「C/C++ のビルド環境がない」「C/C++ のコードが参照しているライブラリがない」などの原因でビルドに失敗すると、pip でのインスールに失敗するということになります。失敗した場合は大抵はコンパイルエラーのメッセージが出力されているはずです。

venv で仮想化できるのは Python の環境だけです。OS の差異は吸収できません。
OS の差異も含めて動作環境の再現性を担保したい場合は、Docker を使うとよいでしょう。

投稿2021/01/19 04:48

編集2021/01/19 04:52
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuu

2021/01/19 05:27

ご回答ありがとうございます。 > Python のコードのみで書かれたライブラリであればビルドは不要ですが、C/C++ などビルドが必要なコードに依存している Python のライブラリは、その環境に応じたバイナリが必要です。 度々の質問になってしまい恐縮ですが、ビルドというのはどのような作業を行うステップなのでしょうか...? また、バイナリというのはいわゆる0と1のみで構成された2進数で表現されたデータのファイルであるかと認識しているのですが、Pythonのライブラリを使用するには何故必要なのでしょうか...?
tiitoi

2021/01/19 05:39 編集

> 度々の質問になってしまい恐縮ですが、ビルドというのはどのような作業を行うステップなのでしょうか...? Python しか書いたことがないと馴染みがないかもしれませんが、コードを機械語に変換する作業です。Python のようなスクリプト言語と違い、C/C++ などのコンパイル言語はコードを実行するためにこの変換処理が必要になります。そして、この変換は OS に依存するので、Windows 用と Ubuntu 用ではバイナリ (コンパイル後の形式) が異なります。 詳しくは「コンパイラ」「コンパイラ型言語」で調べてください。 コンパイル言語とスクリプト言語の違い https://teratail.com/questions/51394 > Pythonのライブラリを使用するには何故必要なのでしょうか...? Python の一部のライブラリは計算処理を高速化する目的であったり、他の言語で書かれた既存のライブラリ資産を利用する目的で、Python 以外のコードに依存する形になっています。その場合、コンパイルが必要になるケースもあります。 つまり、Python のライブラリが Python のコードだけで成り立っているとは限らないということです。
ruuuu

2021/01/19 05:50

大変ご丁寧に教えて下さり、ありがとうございます。 今までコードが何故実行されるのかといったことは難しく避けてきてしまった部分があったのですが、今回ご助言頂き、一気に分からなかった部分が理解できました。 大変勉強になり、助かりました。
guest

0

原因は依存しているライブラリーがインストールされていない、ということのようです。

下記の記事をご参照ください。

参照元;
pip3 install するときに、Failed building wheel for cryptography

pip実行時に「failed building wheel for tornado(bdist_wheel)」などのエラーが出たときの対処法

投稿2021/01/19 03:16

編集2021/01/19 03:16
_whitecat_22

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuu

2021/01/19 04:32

ご回答ありがとうございます。 > 原因は依存しているライブラリーがインストールされていない、ということのようです。 こちらが原因となってしまっていたのですね... しかし、気になる点としては、ローカルでもvenvにて仮想環境を作成しているにも関わらず、ubuntu側では何故このようなエラーが発生してしまっているのか、といった点なのですよね...
_whitecat_22

2021/01/19 06:13

解決に至ってよかったです。 ubuntu側で、、、の疑問は、tiitoiさんの回答・解説の通りです。 私も大変勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問