🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

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

Q&A

解決済

1回答

3078閲覧

pyinstallerによるpy他関連リソーセス含めたexe化

papo

総合スコア19

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

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

0グッド

0クリップ

投稿2021/02/09 07:10

こんにちは! 
長文ですが、ご教授お願い致します!

画像(g01.jpg)とCSS(te1.css)から成るHTMLがあって、フォルダ構成はこのようになっています

test4
|-2-8.html
|-img
-|-g01.jpg
|-css
-|-te1.css

showhtml.pyというHTMLを開くだけのプログラムを作成したあと
Pyinstaller にかけてshowhtml.exeまで作成できています
(exe実行でHTMLが開くことを確認済み)

showhtml.py

1from io import StringIO 2import webbrowser 3import sys 4import os 5 6def resource_path(relative): 7 if hasattr(sys, "_MEIPASS"): 8 return os.path.join(sys._MEIPASS, relative) 9 return os.path.join(relative) 10 11url = resource_path("C:/Users/****/Desktop/test4/2-8.html") 12browser = webbrowser.get('"C:/Program Files/Google/Chrome/Application/chrome.exe" %s') 13webbrowser.open_new_tab(url)

test4
|-2-8.html
|-img
-|-g01.jpg
|-css
-|-te1.css
|-showhtml.py
|-showhtml.spec
|-dist
-|-showhtml.exe

showhtml.pyの関連リソーセスとして、htmlとjpgとcssを同梱してEXE化したいので
showhtml.specにて、以下のようにtreeを使ってこれらが保存されているパスを指定・・・

showhtml.spec

1# -*- mode: python ; coding: utf-8 -*- 2 3block_cipher = None 4 5 6a = Analysis(['showhtml.py'], 7 pathex=['C:\Users\10117\Desktop\test4'], 8 binaries=[], 9 datas=[], 10 hiddenimports=[], 11 hookspath=[], 12 runtime_hooks=[], 13 excludes=[], 14 win_no_prefer_redirects=False, 15 win_private_assemblies=False, 16 cipher=block_cipher, 17 noarchive=False) 18pyz = PYZ(a.pure, a.zipped_data, 19 cipher=block_cipher) 20exe = EXE(pyz, 21 a.scripts, 22 a.binaries, 23 Tree('../test4',prefix='test4'), 24 a.zipfiles, 25 a.datas, 26 [], 27 name='showhtml', 28 debug=False, 29 bootloader_ignore_signals=False, 30 strip=False, 31 upx=True, 32 upx_exclude=[], 33 runtime_tmpdir=None, 34 console=True ) 35

このspecファイルをpyinstaller にかけると、ちゃんと新たにshowhtml.exe が生成されているのですが
同梱がうまくできていません。(exe実行すると、元のtest4フォルダ以下を参照しにいってます)

treeのところが怪しいと思っていますが、これ以上先に進めず困っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

url = resource_path("C:/Users/****/Desktop/test4/2-8.html")
コードのこの箇所が絶対パスになってるからとかではなく…?

投稿2021/02/09 23:29

jeanbiego

総合スコア3966

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

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

papo

2021/02/10 03:03

ご回答ありがとうございます。  url = resource_path("2-8.html") このように変更してやってみました pyinstaller×2回とも成功して、exeファイルが生成されました。 ですが、これを実行すると、同梱できておらず、元データ参照も外れてしまい元のHTMLも開けない状況になりました。
jeanbiego

2021/02/10 03:42

まず、その相対パスは正しいのでしょうか。 exe化する前のpyファイルは正しく動きますか?
papo

2021/02/10 03:57

"showhtml.py"と"2-8.html "は同階層にあり、 exe化する前のpyファイルは正常に動作致します。 (pyファイルをダブルクリックすると2-8.htmlが開く)
jeanbiego

2021/02/10 04:04

exeとhtmlも同階層ですか?
papo

2021/02/10 04:36

コマンドプロンプトにて pyinstaller showhtml.pyを実行すると、 htmlと同階層にdistフォルダが生成されてexeはその中にあります
jeanbiego

2021/02/10 04:46

exeとhtmlが同階層にないのにurl = resource_path("2-8.html")と書いても動かないのは当然で、親階層みるように書いてみてはいかがでしょう。
papo

2021/02/11 09:31

レスポンス遅くなってすみません、できました! 結果的には、url = resource_path("2-8.html") と書くしかできなかったため すべてのリソーセスを同階層に置くことにしました。 最終的に見えない部分なのでフォルダ分けなんてどうでも良いということに気付きました。 それに合わせてコード微修正して、 肝心のspecファイルは こちら↓を参考に修正したところ、狙い通りのEXEができました https://qiita.com/firedfly/items/f6de5cfb446da4b53eeb jeanbiegoさま、階層というクリティカルなヒントを与えていただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問