概要
pythonで作成したプログラムをターミナルを開かない実行ファイルとしてMac OSで動作させたいです。
プログラムの内容としましては、
・PySimpleGUIでUI動作
・Seleniumでスクレイピング
・CSVでデータ管理
・サーバーのPHPとログデータやりとり
と言った感じです。
現状、pyinstaller、py2app、cx_freezeのどれかを使うことを考えているのですが、なかなか上手くいきません。
環境
- macOS Catalina バージョン10.15.7
- pyenv Python 3.6.5
試した事
pyinstaller
ターミナルからpyinstaller /Users/myname/hoge/fuga/main.py --onefile --noconsole
コマンドで実行ファイルを作成すると、main(拡張子ナシ)とmain.appが作成される。
mainをダブルクリックするとプログラムは正常に動作するが、同時にターミナルが開く。
main.appをダブルクリックすると、Dockのすみっこでアイコンが何回かバウンドして消えるだけ…
なお、同様の方法でWindowdでpyinstallerを使用し同じプログラムを実行ファイル化したところ、Windowsではコマンドプロンプトも開かず期待通りに動作するmain.exe実行ファイルは作成できた。
参りました
py2app
ターミナルよりpy2applet --make-setup /Users/myname/hoge/fuga/main.py
コマンドでsetup.pyを作成。setup.pyの内容は以下
Python
1""" 2This is a setup.py script generated by py2applet 3 4Usage: 5 python setup.py py2app 6""" 7 8from setuptools import setup 9 10APP = ['/Users/myname/hoge/fuga/main.py'] 11DATA_FILES = [] 12OPTIONS = {} 13 14setup( 15 app=APP, 16 data_files=DATA_FILES, 17 options={'py2app': OPTIONS}, 18 setup_requires=['py2app'], 19) 20
そしてpython setup.py py2app
コマンド実行、main.appが作成される。
ダブルクリックで起動すると下記の添付画像のウィンドウが開くのみ。
ちなみにmain.appのパッケージ内容であるmain.app/Contents/MacOS/mainを実行すると、上記と同様のウィンドウとともにターミナルが開き
Traceback (most recent call last): File "pandas/__init__.pyc", line 30, in <module> File "pandas/_libs/__init__.pyc", line 13, in <module> File "pandas/_libs/interval.pyc", line 14, in <module> File "pandas/_libs/interval.pyc", line 10, in __load File "imp.pyc", line 343, in load_dynamic File "pandas/_libs/interval.pyx", line 1, in init pandas._libs.interval File "pandas/_libs/hashtable.pyc", line 14, in <module> File "pandas/_libs/hashtable.pyc", line 10, in __load File "imp.pyc", line 343, in load_dynamic File "pandas/_libs/hashtable.pyx", line 1, in init pandas._libs.hashtable File "pandas/_libs/missing.pyc", line 14, in <module> File "pandas/_libs/missing.pyc", line 10, in __load File "imp.pyc", line 343, in load_dynamic File "pandas/_libs/missing.pyx", line 1, in init pandas._libs.missing File "pandas/_libs/tslibs/__init__.pyc", line 30, in <module> File "pandas/_libs/tslibs/conversion.pyc", line 14, in <module> File "pandas/_libs/tslibs/conversion.pyc", line 10, in __load File "imp.pyc", line 343, in load_dynamic File "pandas/_libs/tslibs/conversion.pyx", line 1, in init pandas._libs.tslibs.conversion ModuleNotFoundError: No module named 'pandas._libs.tslibs.base' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/myname/Desktop/py2app_test/dist/main.app/Contents/Resources/__boot__.py", line 81, in <module> _run() File "/Users/myname/Desktop/py2app_test/dist/main.app/Contents/Resources/__boot__.py", line 66, in _run exec(compile(source, path, 'exec'), globals(), globals()) File "/Users/myname/Desktop/py2app_test/dist/main.app/Contents/Resources/main.py", line 9, in <module> import pandas as pd File "pandas/__init__.pyc", line 38, in <module> ImportError: C extension: No module named 'pandas._libs.tslibs.base' not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --inplace --force' to build the C extensions first. 2021-05-27 02:26:28.141 main[53263:3611995] main Error
とのエラーメッセージが表示される。
参りました
cx_freeze
setup.py作成。
Python
1# -*- coding: utf-8 -*- 2 3import sys 4from cx_Freeze import setup, Executable 5 6base = None 7if sys.platform == 'win32': 8 base = 'Win32GUI' 9 10executables = [ 11 Executable('main.py', base=base) 12] 13 14setup(name='main', 15 version='0.1', 16 executables=executables 17 )
main.pyをtest.pyと同じフォルダに置いて
python setup.py bdist_mac
コマンド実行。
するとbuildフォルダ内にmain-0.1.appが作成されるが、ダブルクリックするとまたDockでアイコンが跳ねて消える…
ちなみにmain-0.1.appのパッケージ内、main-0.1.app/Contents/MacOS/mainという実行ファイルをダブルクリックすると、ターミナルは開いてしまうが動作はする模様(なぜかGUIの解像度がエライ低いが…)
また、build/exe.macosx-10.15-x86_64-3.6/mainに作成されている実行ファイルをダブルクリックすると、ターミナルは開いてしまうが動作はする。(GUI解像度も通常)
参りました
参考?
参考になるかわかりませんが、main.pyで使用しているライブラリを添付します。
Python
1 2import base64 3import csv 4import datetime as dt 5import glob 6import hashlib 7import hmac 8import json 9import os 10import pandas as pd 11import PySimpleGUI as sg 12import random 13import requests 14from selenium import webdriver 15from selenium.webdriver.common.keys import Keys 16from selenium.webdriver.common.action_chains import ActionChains 17import socket 18import sys 19import threading 20import time 21import traceback 22import urllib.parse 23from webdriver_manager.chrome import ChromeDriverManager 24
まとめ
Mac OSでターミナルを開かずGUIで動作する実行ファイルを作り(配布し)たいだけなのに…難しいですね…
他に記述すべき事がありましたらご指摘いただけたら、随時更新させていただきますので、何か打開策をご教授いただけたら幸いです。
何卒よろしくお願い申し上げます...!!!!!!!!!!!!!!!!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。