質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

解決済

1回答

6365閲覧

pyinstallerでexe化したものが実行できない

vaitarika

総合スコア29

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

1クリップ

投稿2019/02/22 04:49

編集2019/02/25 08:07

MacOSでpyinstallerを使ってGUIアプリをexe化しようとしているのですが、作られた実行ファイルを開いても何も起こらず、開いたエフェクトだけが出てくる状態になってしまいます。
エラーメッセージが出てこないと書いていましたが、実行できないものに共通して以下のエラーメッセージが出て来ていました。

FileNotFoundError: Tcl data directory"~~/tcl"not found. Failed to execute script pyi_rth__tkinter

"~~"の部分は自分のディレクトリです。
py2appでは実行ファイルにして実行できたものがpyinstallerではできないという状況になっています。
バージョンは以下のものを使っています。
python 3.6.6
pyinstaller 3.4

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

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

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

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

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

hayataka2049

2019/02/22 12:43

実行ファイルをターミナルから実行しても何も言いませんか?
vaitarika

2019/02/25 07:03

ターミナルから実行してもエラーなどは出ずに一瞬でウィンドウが消えて終わってしまいます
vaitarika

2019/02/25 07:56

py2appの方でデータファイルを読み込んで使うものをバイナリ化してアプリにしたのですが、そちらでは実行ファイルをターミナルから実行したところ起動したのですが、単純に出来たアプリを開こうとするとエラーが出てしまうということが起こりました。 py2appではこのプログラム以外の簡単なものはアプリ化しそのまま開けたのですが、これだけがターミナルからしか実行できずまた、pyinstallerではpy2appで開けた簡単なものも含めて全て開けないという状況になっています。
vaitarika

2019/02/25 10:15

追加で質問してしまい申し訳ありません。 pyinstallerでプログラム内で使うデータセットを取り込むにはどうすれば良いでしょうか。 https://github.com/pyinstaller/pyinstaller/issues/3753 このサイトを見たところ単純に一つのプログラムで完結しているものは実行ファイル化できたように思われます。
Bindi

2019/03/06 10:47

pyinstaller のコマンドラインオプションで指定するか、 spec ファイルを作り、そこに書き込んでオプションで渡すと思うのですが、どうやっていますか?
Bindi

2019/03/06 18:23

あと、 github の issues なんですが、 tkinter をインポートするときに、 hook-_tkinter.py に問題があるよ(python3.7 on MacOSのみ)!って内容ですので、関係ないかと。
vaitarika

2019/03/11 10:36

質問ありがとうございます。 自分が作っているプログラムは、一つのメインプログラムが他の自分で書いたpythonスクリプトを使い、そのうちの一つの中でcsvファイルを読み込むというものなのですが、pyinstallerのコマンドライン上ではメインプログラムのみを指定して他には特に何も指定はしていません。 また、csvファイルを読み込むpythonスクリプト中で、そのpythonスクリプトと同じディレクトリにある特定の名前のcsvファイルを読み込ませるようにしています。 質問で述べていたエラー自体は、githubにある pyinstaller --windowed myapp.py cd dist/myapp.app/Contents/MacOs mkdir tcl tk cp -R /Library/Frameworks/Python.framework/Versions/3.7/lib/tcl* tcl/ cp -R /Library/Frameworks/Python.framework/Versions/3.7/lib/tk* tk/ cp -R /Library/Frameworks/Python.framework/Versions/3.7/lib/Tk* tk/ の部分の3.7を3.6にしたところ消えて、csvファイルを用いない他のpythonスクリプトを試して見たところ実行することができるようになりました。
guest

回答1

0

ベストアンサー

tcl がバンドルされていないか、バンドルはされているが、パスが通っていないのどちらかであると思われます。

まずは、バンドルされているか確認しましょう。 --onefile のオプションを外すとパッキングされずに、バンドルに必要なファイルが dist/<script name> に集まった状態になります。そこに tcl はありますか?

そのまえに、 --onefile を付けたときと、付けないときに注意することがあります。それは、 --onefile を付けて実行すると dist の配下にファイルが作られますが、そのあとに、 --onefile を外して実行すると例外エラーが発生します。これは、ファイルと同じ名前でディレクトリを作成するので、このときにエラーになります。逆も同じで、ディレクトリが存在しているところへ、同じ名前でファイルを作ろうとするので例外エラーが発生します。

ちなみに、例外オブジェクトは FileExistsError です。ファイルまたはディレクトリを削除するか、 --distpath DIR オプションで個別に指定してください。

私は Windows sub System on Linux で Ubuntu 18.04 LTS を使っています。 tcl はスクリプトがある直下に存在していますので、パスを通さなくても実行できました。Mac の場合はどうでしょうか?

import できない場所にあるのならば、パスを通しましょう。 --paths DIR オプションで指定します。複数指定したい場合は、 : で区切ってください。 --paths DIR:DIR:DIR...

どうでしょうか?

投稿2019/03/07 11:07

Bindi

総合スコア129

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

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

vaitarika

2019/03/11 09:41

回答ありがとうございます。 dist/<script name>には「libtcl8.6.dylib」というものはありましたが、「tcl」というものは存在していませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問