python

MacOS+PyInstallerで実行ファイル作ろうとしたらハマった

先日、WindowsでPythonの.exeを作成しました。
>> pythonプログラムを配布するために.exe化する手順

上記記事はWindows環境で試してみた記事なのですが、基本的にMacの場合も同じなので、使い方的なお話はリンク先をどうぞ。

ただ、Macだと本家Python+PyInstallerの組み合わせで実行ファイルを作ったものが動作しないという問題があります。

/Users/dimaru/PycharmProjects/HelloPyInstaller/dist/hello/hello ; exit;
[10915] Error loading Python lib 
'/Users/dimaru/PycharmProjects/HelloPyInstaller/dist/hello/Python': dlopen:
dlopen(/Users/dimaru/PycharmProjects/HelloPyInstaller/dist/hello/Python, 10): 
no suitable image found.  Did find:
/Users/dimaru/PycharmProjects/HelloPyInstaller/dist/hello/Python: 
code signature invalid for 
'/Users/dimaru/PycharmProjects/HelloPyInstaller/dist/hello/Python'

(こんな感じのログが出力されて止まってしまう)

結論を言うと、もしMac環境でPythonの実行ファイルを作りたいなら、Homebrew+Python+PyInstallerの環境で作る必要があるようです。
>> problems with osx sierra python3.5 tkinter #2665

上記サイトでは根本原因までは突き止められていないものの、brewでやったらなんだかよく分からんけどウマくいったぜ的なことが書かれています。
これを知らずに本家Pythonでやって見事にハマった僕が、ここからbrew+Python環境を構築して挽回するという内容になっています。

本家Python入れちゃってるよ~って人は参考になるかも。

Homebrewとは

Homebrewとはパケージ管理システムのことで、

brew install python

のようなコマンドでアプリなどをインストールすると、依存ライブラリも含めてインストールしてくれるうえ、アンインストールも

brew uninstall python

とコマンドを打つだけで一括りのファイルをアンインストールできるというものです。

と、いうわけで、今回は、

  • Macから本家Pythonをアンインストール
  • Homebrew版Pythonをインストール
  • PyInstallerをインストールして実行ファイルを作成する

このような順でお届けします。

Macから本家Pythonをアンインストールする

本家からダウンロードしてきた.dmgファイルからインストールした本家Pythonは、ワン操作でアンインストールすることはできません。
手作業でファイルを消していくことになります。

WindowsでインストールしたPythonならプログラムの追加と削除で簡単にアンインストールできるのになぁ。。
(Mac歴4ヶ月ほどのなんちゃってドヤラーなのでかなり無知です)

手順としては、

  • LaunchpadからPythonを削除する
  • Python本体を削除する
  • 本体にリンクしていたシンボリックリンクを消す

といった感じで結構面倒くさいです。

LaunchpadからPythonを削除する

まず、Launchpadを開き、「Python」で検索。
(僕の環境では既に削除してしまっているので検索結果に出てきていませんがw)

上部の検索に「Python」と入力するとPythonのアイコンが1つ出てきますので、それをゴミ箱に入れます。
(長クリックするとドラッグドロップできるようになるのでゴミ箱にドロップ!)

これでアンインストールは終わり…ではないんですね。

最初はこれさえやればアンインストール終了だと思ってました。。

Python本体を削除する

Launchpadで削除したのはあくまでも起動するショートカット を削除したようなもの。
続いて本体を削除していきます。

本家Pythonの本体ファイルは /Library/Frameworks/Python.framework フォルダです。
Finderではたどり着けないので、ターミナルを開いてコマンドで削除します。

> cd /Library/Frameworks
> sudo rm -rf Python.framework

これで、本体削除完了。

本体にリンクしていたシンボリックリンクを消す

この手順でようやく本家Pythonの削除が完了します。

コマンドラインから呼び出すために、 /usr/local/bin フォルダにシンボリックリンクが置かれています。

本体は先ほど削除したので、もうコマンドとしては機能しませんが、これらの残りカスを削除してしまいましょう。

> cd /usr/local/bin
> rm pip3.8
> rm pydoc3
> rm pydoc3.8
> rm python3
> rm python3-config
> rm python3.8
> rm python3.8-config

これで晴れて、本家Pythonから開放されました!!

Homebrew版Pythonをインストール

さて、本家版Pythinをアンインストールして、なんだかやり遂げた感があるかと思いますが、待って下さい、今回の目的は、MacでPyInstallerを使って実行ファイルを作ることでしたよね。

本家Pythonをインストールしてしまっていたマイナスをゼロにもどしただけにすぎませんw

というわけで、Pythonをインストールするためのパッケージ管理システムであるHomebrewをインストールします。

公式サイトにインストールコマンドが載っていますので、それをコピーしてターミナルで実行。

> /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

結構時間かかりますがインストールされるまで待ちます。。

続いてようやく、Pythonのインストールです。

> brew install python

インストールされたPythonのバージョンを確認。

> python3 -V
Python 3.7.7

2020年6月19日時点では3.7.7がインストールされるようで、本家よりも半年〜1年ほどバージョンとしては遅れている印象。

PyInstallerをインストールして実行ファイルを作成する

さて、ここからの内容は、pythonプログラムを配布するために.exe化する手順で紹介した内容と同じですが、流れでこのまま最後までやっていきましょう。

Pythonをインストールし直したので、パッケージも一式インストールしなおしです。

pip3 install pyinstaller

ここまで長かった…いよいよ実行ファイルのビルド。

pyinstaller —onefile sample.py

さて、 dist/sample に作成された実行ファイルをファインダーからダブルクリックして実行してみましょう!
(本家Pythonでもターミナルからの実行は動作するので)

はい、成功しましたね!
サンプル?なしです。書き疲れてきたってわけじゃ、ないんだからね!!

-python

© 2022 ヂまるBlog