bdrcc
@bdrcc

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Pyinstaller が app を作成できない

解決したいこと

Pythonのtkinterを使用したプログラムを、pyinstallerでアプリケーション化しようとしたところ、エラーが発生しました。
解決方法を教えていただきたいです。

環境

  • MacOS 10.12.6 Sierra
  • Python 3.10.6
  • pyinstaller 5.5

発生している問題・エラー

$ pyinstaller test.py --onefile --noconsole --distpath DIR
...
(中略)
...
11888 INFO: Appending PKG archive to EXE
11905 INFO: Fixing EXE headers for code signing
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/bin/pyinstaller", line 8, in <module>
    sys.exit(run())
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/__main__.py", line 179, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/__main__.py", line 60, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 963, in main
    build(specfile, distpath, workpath, clean_build)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/building/build_main.py", line 885, in build
    exec(code, spec_namespace)
  File "/~(中略)/test.spec", line 24, in <module>
    exe = EXE(
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/building/api.py", line 545, in __init__
    self.__postinit__()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/building/datastruct.py", line 173, in __postinit__
    self.assemble()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/building/api.py", line 776, in assemble
    osxutils.fix_exe_for_code_signing(build_name)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/utils/osx.py", line 179, in fix_exe_for_code_signing
    assert len(sign_sec) == 0, "Executable contains code signature!"
AssertionError: Executable contains code signature!

ご意見・アドバイス等、よろしくお願いいたします。

0

2Answer

  • macOS High Sierra 10.13.6
  • python 3.12.3
  • pyinstaller 6.7.0

バージョンが少し違いますが、次のpythonコードを同じオプションで pyinstaller しましたが、特にエラーになりませんでした。使用しているライブラリの差でしょうか。

test.py
import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master.geometry("300x200")
        label = tk.Label(self.master, text="test", width=30, height=15, bg="red")
        label.pack()

if __name__ == "__main__":
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()
$ pyinstaller test.py --onefile --noconsole --distpath . 
403 INFO: PyInstaller: 6.7.0, contrib hooks: 2024.6 
404 INFO: Python: 3.12.3 
426 INFO: Platform: macOS-10.13.6-x86_64-i386-64bit 
428 INFO: wrote /Users/USERNAME/PATH/test.spec 
440 INFO: Extending PYTHONPATH with paths ['/Users/USERNAME/PATH'] 
687 INFO: checking Analysis 
701 INFO: checking PYZ 
707 INFO: EXE target arch: x86_64 
707 INFO: Code signing identity: None 
719 INFO: checking PKG 
722 INFO: Bootloader /Users/USERNAME/path/to/venv/lib/python3.12/site-
packages/PyInstaller/bootloader/Darwin-64bit/runw 
722 INFO: checking EXE 
724 INFO: checking BUNDLE 
725 INFO: Building BUNDLE BUNDLE-00.toc 
801 INFO: Signing the BUNDLE... 
1010 INFO: Building BUNDLE BUNDLE-00.toc completed successfully. 

$ ls test.* 
test.py test.spec

test.app:
Contents  
$ 
0Like

Comments

  1. @bdrcc

    Questioner

    @nak435 さんは実行できたんですね。
    .pyファイル内で使用しているモジュールは以下の通りです。

    import tkinter as tk
    import tkinter.ttk as ttk
    import datetime
    import json
    import requests
    from tkmacosx import Button
    
  2. import文だけですが、上のライブラリを全部追加してみましたが、エラーとか起きませんでした。できたコマンドも起動できました。

    逆に @bdrcc さんは、import tkinter as tkだけのシンプルな pyファイルであっても、pyinstallerが失敗しますか?

  3. @bdrcc

    Questioner

    test.py
    import tkinter as tk
    
    pyinstaller test.py --onefile --noconsole --distpath DIR
    

    上記の場合は、アプリケーションを作成できましたが、クリックすると「macOS10.13以降でないと使えない」と出ました。

    また、

    test2.py
    import tkinter as tk
    import tkinter.ttk as ttk
    import datetime
    import json
    import requests
    from tkmacosx import Button
    

    の場合は、AssertionErrorが同様に出ているため、tkinter以外のモジュールの問題だ、とわかりました。

  4. まずは、High Sierra にアップデートしてはどうでしょうか。

    macappstores://apps.apple.com/jp/app/macos-high-sierra/id1246284741?mt=12

  5. @bdrcc

    Questioner

    import tkinter as tk
    import datetime
    import json
    

    import tkinter.ttk as ttk または from tkmacosx import Button が入るとAssertionError
    import requestsが入ると

    WARNING: The output directory "(中略)/pyworks/DIR/test2.app" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)
    

    と表示されるようです。

    ちなみに、下記のようなVersionです。

    $ python3 -m pip list
    Package                   Version
    ------------------------- --------
    (中略)
    pip                       22.2.1
    pyinstaller               5.5
    pyinstaller-hooks-contrib 2024.6
    requests                  2.28.2
    setuptools                63.2.0
    tkmacosx                  1.0.5
    (中略)
    
  6. @bdrcc

    Questioner

    @nak435 さん、わかりました。アップデートしてみます。

  7. WARNING: The output directory "/Users/ev60082/pyworks/DIR/test2.app" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)

    これは、すでに test2.app が存在しているから「消しますよ」ってことではないでしょうか?

  8. pyinstallerのバージョンの違いが影響している気がします・・・

    $ python3 -m pip list
    Package                   Version
    ------------------------- ------------
    pip                       24.0
    pyinstaller               6.8.0
    pyinstaller-hooks-contrib 2024.7
    requests                  2.32.3
    setuptools                70.0.0
    thinker                   1.1.1
    tkmacosx                  1.0.5
    
  9. @bdrcc

    Questioner

    これは、すでに test2.app が存在しているから「消しますよ」ってことではないでしょうか?>

    WARNING: The output directory "/Users/ev60082/pyworks/DIR/test2.app" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)

    その通りでした。失礼いたしました。

    High Sierraにアップデート後、pyinstallerを使用したところ、appを作成できました。
    しかし、PC画面下に2回表示が出たものの、appが起動しませんでした(exec?は実行可能でした)

    pyinstaller、その他使用する外部モジュールを、 @nak435 さんと同じバージョンにして再度実行しましたが、結果は同じでした・・・。

  10. 前回回答時は、

    起動できなかった
    $ ./test
    
    起動できた
    $ open ./test.app
    

    でしたが、今日改めて pyinstaller したところ、上のどちらでも起動きました。ソースコードは次の内容です。このコードで試してみてください。

    import tkinter as tk
    import tkinter.ttk as ttk
    import datetime
    import json
    import requests
    from tkmacosx import Button
    
    class Application(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.master.geometry("300x200")
            label = tk.Label(self.master, text="test", width=30, height=15, bg="red")
            label.pack()
    
    if __name__ == "__main__":
        root = tk.Tk()
        app = Application(master=root)
        app.mainloop()
    
  11. 追伸;

    High Sierra の Safari だと、Qiita記事がまともに開けません。Chrome と併用しています。
    (逆にChrome だと開けないサイトがあり、Safari と併用)

    @bdrcc さんは、どうですか?


    古い FireFox 115 をインストールしたら、これが一番安定している感じがします。

  12. @bdrcc

    Questioner

    いただいたコードで、appまで実行することができました。
    ありがとうございます。

    ということは、あとは私が書いたプログラムでappが作成できれば・・・。

    本の情報をAPIから抽出したり、情報をcsvに読み書きするプログラムです。拙いところは多々ありますが、そこは置いておいて・・・。
    VScodeやexecでは問題なく作動します。しかし、appだけがうまく作動しません。



    Qiita記事について、この質問の回答、その他のサイトは基本的に、chromeで問題なく開けています。
    Sierraをインストールした後、Safariがまともに使えなくなったので、それ以降使用するのを控えています。今、Safariでqiitaを開いてみたところ、広告や各アイコンが正常に作動しませんでした。FireFoxはインストールしたことがないので、すみません。

  13. いただいたコードで、appまで実行することができました。

    一旦、環境による『Pyinstaller が app を作成できない』問題は解決されたと考えてよいと思うのですが、最終目的は、@bdrcc さんのコードでappを作ることですから、pythonコードのどの行があり/なしで、できる/できない の境界なのかを、切り分けないとダメですね。
    その境界が分かったところで、再度、Q&A上げるのがよいかと思います。


    Qiita記事について、この質問の回答、その他のサイトは基本的に、chromeで問題なく開けています。

    逆にChromeでダメなサイトはありませんか?

    FireFox のダウンロードリンクです。(もし、よろしければ)

    https://download-installer.cdn.mozilla.net/pub/firefox/releases/115.0.3/mac/ja-JP-mac/Firefox%20115.0.3.dmg

Your answer might help someone💌