Python3.7でPyAudioがインストールできない時の解決法

  • このエントリーをはてなブックマークに追加

Pythonで音声の録音をしたい時、PyAudioがよく使われています。しかし2019年5月時点ではPython3.7でインストールするとエラーが出るようです。今回はそのエラーを回避する方法を紹介します。

こんにちは。wat(@watlablog)です。
今回は音声録音でお世話になるPyAudioのインストール時に発生する問題を解決します

Pythonプログラミングの基本文法や問題解決には体系的な学習プログラムが効果的です。手っ取り早く基礎を覚えるために僕は「PyQ(パイキュー)」に登録してみました。気になる方は「PyQでPython学習!実際に登録してみた感想と気になる料金」という記事を参照下さい!

Python3.7環境でPyAudioをインストールするとエラーになる(Windows)

Advertisements

Pythonで音声を録音して色々分析する場合、「PyAudio」という外部ライブラリパッケージが便利なようです。

ネットでも情報が多いので、是非このライブラリ使いたい!と思いきや、今回僕はインストール時のエラーに悩まされましたので、解決までの道のりを紹介します。

エラーはいやだよね。
でも、なんとか解決する道を探そう!

インストール時の環境

まず、インストール時の状況を整理します。

エラーは2019年5月20日に、以下の表のマシン環境で発生しました。Pythonのバージョンはコマンドプロンプトに「python -V」と、pipのバージョンは「python -m pip -V」と打てば調査することができます。

エラー発生日2019年5月20日
OSWindows10 Home
ビット数64bit
PythonバージョンPython3.7.3
pipバージョンpip019.0.3

この辺の内容は、
Pythonインストール方法とAnacondaを使わない3つの理由」、
Pythonのパッケージ管理ツール pipの使い方とコマンド集
で出て来た内容ですね。僕自身も過去の記事を見返して思い出しています。

いちいち覚えてられんもんな。

特に今までは問題無く使えていましたが、この環境でエラーが発生しました。

※ちなみに筆者はmacOSも使っていますが、こちらは特にPython3.7でも問題無くインストール可能でした。しかしportaudioが必要だったりするので、詳しくは「PythonのPyAudioで音声録音する簡単な方法」に記載しましたのでご確認下さい。

エラー内容

エラーはpipを使ってインストールするタイミングで発生します。いつものように以下のコマンドでインストールを試みると…

以下の図のようにエラーメッセージが出ます。

エラーの原因

pipのバージョンが古い?→違いました。

上記エラーメッセージは「Microsoft Visual C++ 14.0 is ...」と書いてありますが、その下に、「pipのバージョン新しくなってるよ!このコマンドで新しくしてみて!」とアップデートを促されています。

もしかして、pipのバージョンを新しくすれば自動的にPyAudioをインストールしてくれるようになるかも!?

淡い期待を込めて「python -m -pip install --upgrade pip」と打ち込んでpipを最新版に更新し、再度PyAudioのインストールを試みましたが、

さっきと同じでした!

これじゃないんかい!

無駄にpipが更新されました。

エラー内容をよく見てみる

エラーメッセージはちゃんと内容を伝えてくれています。英語でも臆せず読んでみましょう。

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

https://visualstudio.microsoft.com/ja/downloads/

中学レベルの英語でした。要は「このURLからBuild Toolsをゲットして」ということのようです。

では早速インストールをして解決しましょう!

エラー解決方法

Visual C++ Build Toolsのダウンロード

エラーメッセージに書いてあるURLアドレスを使って、Microsoftのダウンロードサイトに行きましょう。
リンクを以下に再掲します。

Microsoft Downloads

ここがわかりにくい所ですが、画面の下までスクロールすると、「Visual Studio 2019のツール」があります。

このツールの右側にあるプラスマークをクリックして中身を開くと、「Build Tools for Visual Studio 2019」があります。これが目的のツールです。
※間違って一番上のVisual Studio 2019をダウンロードしないように注意。

Visual C++ Build Toolsのダウンロード

vs_buildtools__2017426784.1558363486.exe」というファイルがダウンロードされたはずです(細かい数字はダウンロードしたバージョンによって異なると思います)。

Visual C++ Build Toolsのインストール

ダウンロードした「vs_buildtools__2017426784.1558363486.exe」をダブルクリックして起動し最初の画面で「続行」をクリックすると、しばらくしてインストールの設定画面が開きます。

C++ Build Tools」というのが所望のBuild Toolsなので、これにチェックを付けて「インストール」をクリックします。

PyAudioを直接ダウンロードしてインストールする

上記までの操作でBuild Toolsはインストールされましたが、pipで再度インストールを試みると再度大量のエラーが…!

日本語のサイトでは「PyAudioはPython3.6で使うのが無難」との意見が大半でしたが、色々探しているとstack overflowというサイトに気になる文章がありました。

I faced a similar issue.
The only way I was able to resolve this was by uninstalling anaconda, installing the latest version of python, and reinstalling the latest version of conda.
I then downloaded the latest .whl file for pyaudio which can be found here: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio
I moved this file from my downloads and into the site-packages folder of anaconda3: C:\Users\Projects\Anaconda3\Lib\site-packages
Upon running the command 'pip install pyaudio' OR 'python -m pip install pyaudio' in the anaconda prompt I was good to go
I hope this helps!

stack overflow: PyAudio

上の方はAnaconda環境における問題の解決策について述べていますが、注目すべきは中間部分にあるURL。

この人はここからPyAudio最新の.whl ファイルを直接ダウンロードしてpipでインストールし解決したそうです。

結論から言うと、この方法で問題は解決しました

上記引用部分中間にある「https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio」をクリックすると、ファイルリストページが表示されます。今回はPython3.7, Windows64bitで使いたいので、以下の画像のファイルをダウンロードしました。

stack overflowの回答者はpipでインストールする時の正規の場所にファイルを置いてインストールしていましたが、僕の場合はコマンドプロンプトのカレントディレクトリの直下にダウンロードしたファイルを置いて、以下のコマンドで直接インストールしました。

「Successfully」の文字が出れば終了です。PyCharm等で「import pyaudio」でエラーが出ないかどうか、またはコマンドプロンプトで「python -m pip show pyaudio」でNumPy等と同じ場所にちゃんとインストールされているかを確認してみて下さい。

…今回は解決まで調査に時間がかかった!

まとめ

Python3.7でPyAudioをインストールする場合、2019年5月現在だとエラーが発生します。

しかしPython3.7に対応していないわけではなく、インストール時の交通整理がまだ上手くいっていないことが問題のようです。

解決方法は、エラー文で出て来たMicrosoftのBuild Toolsを入れるPyAudioのインストーラを直接指定してインストールする、の2つでした。

エラーはプログラミングにつきもの!
情報は海外のWebも活用して取り入れると良いかも!

Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメント

  1. 通りすがり より:

    pipのバージョンは「python -m -pip -V」と記載されてますが、正しくは「python -m pip -V」のようです。

    1. wat より:

      完全に誤記でしたので修正しました!ご連絡誠にありがとうございます!
      本当に助かります!

  2. たお より:

    C++のインストールはエラーが出ていたとしても、後者のwhlのインストールだけでうまくできましたよ。

    1. wat より:

      なるほど、こちらは順番にエラーを解決していましたが、whlのインストールを先にすることで解決するんですね。
      新しい情報ありがとうございました!

  3. ch3cooh より:

    ありがとうございます、助かりました。
    Visual C++ Build Toolsインストール後にpipでpyaudioをインストールしようとすると「warning C4005: ‘MS_WIN64’: マクロが再定義されました。」とエラーが出てきてどうしたらよいのかと思っていたところでした。

    1. wat より:

      ご訪問、ご報告ありがとうございます。
      解決されたようで何よりです。

  4. garu より:

    Python初心者です。pyaudioの導入で少し迷っていてコマンドからインストールですが…コマンド以外のインストール方法はありますか?

    1. wat より:

      ご訪問ありがとうございます。
      コマンド以外というとpipインストール以外ということでしょうか。
      申し訳ございませんが、PyAudioのGUIインストーラがあるかどうかはわかりません。
      コマンドインストール以外を必要とする理由がわかれば何か解決策が見つかるかも知れません。

      例えば、同じくコマンドを使いますが、オフライン環境にインストールしたい場合は以下の方法があります。
      https://watlab-blog.com/2020/03/16/pip-proxy-error/

  5. しゅう より:

    本を購入して勉強している初心者です。
    PyAudioでエラーがやはりでて、そこから先に進めない状態になりました。

    BuildのツールとかはDLしたところまではよかったのですが。

    以下の方法も
    python -m pip install .\PyAudio-0.2.11-cp37-cp37m-win_amd64.whl

    ERROR: PyAudio-0.2.11-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.

    1. wat より:

      ご訪問、書籍のご購入ありがとうございます。
      外部ライブラリはバージョン関係でエラーが出る場合がよくあります。
      この記事ではPython3.7を使っている古い記事なのでcp37の.whlが適していますが、
      しゅうさんのお使いのPythonのバージョンは3.7ですか?

      ちなみに書籍ではPython3.12.3を使っていました。
      まずはバージョンのご確認をお願いします。

  6. しゅう より:

    いつもありがとうございます。
    少しずつ勉強しています。
    from ultralytics import YOLO
    model = YOLO(‘yolov8n.pt’)
    のところで、

    UnpicklingError
    という形で、それ以降に進めていません。いろいろ調べてみたのですが、わかりませんでした。考えられるものがあれば、教えてください。 

    1. wat より:

      お問い合わせありがとうございます。
      UnpicklingErrorはpickleオブジェクトファイルを開く時に発生するエラーで、少なくとも次の要因が考えられます。
      ・ダウンロードしたファイルが破損している
       yolov8n.ptファイルを削除してやり直し、同じエラーが出るかどうか確認する。
      ・ultralyticsのバージョンが異なる
       まずは書籍と同じPythonのバージョンで、ultralyticsも8.2.12を使ってみて同じエラーが出るかどうか確かめる。
       この場合、一度pip uninstall ultralyticsでアンインストールしてから、
       再度pip install ultralytics==8.2.12を実行する必要があります。
      YOLOまで進んでいるということはあとすこしですね!
      少しでもお力になれるよう、気になる点があれば追加のご質問をしてみてください。
      よろしくお願いいたします。

  7. しゅう より:

    ありがとうございます。
    一度、削除して、8.2.12を試しましたが、同じエラーでした。エラーがでると、英語を見ながら考えるのも、慣れてきました。
     今回のエラーは、WEB上にもあまり参考になるものを見つけられないので、お手上げ状態になってきました。
     もし試す方がいいないようがあれば、教えてください。
     

    ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
    UnpicklingError: Weights only load failed. This file can still be loaded, to do so you have two options, do those steps only if you trust the source of the checkpoint.
    (1) In PyTorch 2.6, we changed the default value of the weights_only argument in torch.load from False to True. Re-running torch.load with weights_only set to False will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source.
    (2) Alternatively, to load with weights_only=True please check the recommended steps in the following error message.
    WeightsUnpickler error: Unsupported global: GLOBAL ultralytics.nn.tasks.DetectionModel was not an allowed global by default. Please use torch.serialization.add_safe_globals([DetectionModel]) or the torch.serialization.safe_globals([DetectionModel]) context manager to allowlist this global if you trust this class/function.

    Check the documentation of torch.load to learn more about types accepted by default with weights_only https://pytorch.org/docs/stable/generated/torch.load.html.

    1. wat より:

      これまで自分はバージョン関係さえ揃えればだいたいうまくいっていました。
      メッセージを見るとtorchに関連したものがありますね。
      pip listで表示されるtorchのバージョンは何でしょうか?
      もし教えていただければこちらで仮想環境を用意して、うまくいくバージョンは何なのかをチェックしようと思います。

  8. しゅう より:

    お手数をおかけしてしまって申しわけありません。PIP LISTの一部をお送りします。
    torch 2.6.0
    torchvision 0.21.0
    tornado 6.4.2
    tqdm 4.67.1
    traitlets 5.14.3
    types-python-dateutil 2.9.0.20241003
    typing_extensions 4.12.2
    tzdata 2025.1
    ultralytics 8.2.12
    週末に勉強しているので、間隔があいてしまいすみませんでした。もしお時間があればアドバイスいただければと思います。先にお礼申し上げます。

    1. wat より:

      ちょっと調べてみました。
      結果的にはこちらの環境でも再現しました。

      ultralyticsをインストールした時、torchも依存ライブラリとして自動的にインストールされます。
      書籍が出た時は問題なかったのですが、現在書籍通りにインストールを進めるとtorchのバージョンが2.6になります。
      torchのバージョンが2.6以降の場合、セキュリティの観点で施されたアップデートが今回のエラーの原因です。

      ◼️簡単な対策方法
      以下のコマンドを実行してtorchをアンインストールする。
      pip uninstall torch

      その後、以下のコマンドを実行してバージョンダウン版のtorchをインストールする。
      pip install torch==2.5

      これでこちらの環境ではコードが動作するようになりました。

      torch==2.6で解決する方法は、ultralyticsの内部コードで呼び出されているtorch.loadでweights_only=Falseを書けば良いらしいですが、こちらは上級の解決方法になります。
      これは現段階で起こるべくして起こっているので、貴重な情報としてブログにも解決方法を示しておこうと思います。
      まずはしゅうさんの方で解決するかご確認いただけませんでしょうか?

      よろしくお願いいたします。

コメントを残す

*