パッケージングツールPyinstallerの使用と落とし穴の回避
このブログでは、Windowsでのpyinstallerの基本的な使い方と、基本的な落とし穴の回避について書いています。
Windowsでpyinstallerツールを使ってパッケージを作成すると、パッケージ一覧にこのような警告メッセージが表示される問題があります。
ImproperlyConfigured: GDAL ライブラリが見つかりませんでした ("gdal302", "gdal301", "gdal300", "gdal300".Gdal302" を試しました)。quot;, "gdal204", "gdal203", "gdal202", "gdal201", "gdal20") となります。GDALはインストールされていますか?collect_submodules: failed to import 'django.contrib.gis.sitemaps'!
そんなメッセージは無視すればいい。
<スパン I. 基本的な使用方法
1. pyinstallのインストール
# pip install pyinstaller
2. プログラムが必要とするファイルを探す
# Make a .spec file # Enter the project directory and execute the command: (there are other parameters: -F, etc., -D is recommended) # -D will create a folder in the current directory in the dist directory, which is more convenient when working with static files # pyi-makespec -D manage.py
<スパン 3. .exeファイルを生成する
# Execute in the same level as manage.spec # pyinstaller manage.spec
4. distディレクトリに移動し、プロジェクトを実行する
# generated exe executable runserver --noreload # manage.exe runserver --noreload
<スパン II. 基本的なエラー処理
1、exe実行後にプロンプトが表示された場合。XXXという名前のモジュールがありません
理由 この状況の理由は、いくつかの Django モジュールは自動的に収集されないため、手動で追加する必要があるためです
回避策 生成されたファイルを拡張子.specで開き、エラーになったモジュールをhiddenimportsに追加します。
2. エラーで実行した場合。UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte.
理由:主にWindowsのgbkエンコーディングの問題
解決方法 エラーメッセージの上の行のエラーファイルを開き、open()で修正するエラー行にジャンプし、そこにencoding='utf-8'を追加してください。
<ブロッククオート上記例外の処理中に、別の例外が発生しました。
トレースバック (最も最近の呼び出し):
ファイル "threading.py"、ライン 890、in _bootstrap
ファイル "threading.py", 行 936, in _bootstrap_inner
ファイル "traceback.py", 行 167, in format_exc
ファイル "traceback.py", 行 121, in format_exception
ファイル "traceback.py", 行 521, in __init__.
ファイル "traceback.py", 行 533, in _load_lines
ファイル "traceback.py", 行 533, in _load_lines
ファイル "traceback.py", 行 533, in _load_lines
[前の行をさらに2回繰り返す]
ファイル "traceback.py", 行 531, in _load_lines
ファイル "traceback.py", 行 285, in line
ファイル "linecache.py", 行 16, in getline
ファイル "linecache.py", ライン 47, in getlines
ファイル "linecache.py", 行 103, in updatecache
ファイル "PyInstallerloader ⇄pyimod03_importers.py" 行 299, in get_source
UnicodeDecodeError: 'gbk' コーデックは、位置 11211 のバイト 0xa6 をデコードできません: 不正なマルチバイト配列です。
上記はエラー報告の例で、"PyInstallerloader pyimod03_importers.py" ファイルを開き、299行目をコンパイルして、add: encoding='utf-8' に対応する場所を探します (Note: modify the backup before the misuse to avoid find not back)
3、このエラーで実行した場合。TemplateDoesNotExist at /index/ です。
理由 TemplateDoesNotExist これは、テンプレートファイルが見つからなかったためです。
回避策 エラーメッセージに従って、テンプレートファイルを該当パスに追加し、更新してください。
<ブロッククオート
TemplateDoesNotExist at /index/
index/index.html
リクエスト方法 GET
リクエストURL: http://127.0.0.1:8000/index/
Django バージョン: 3.2.9
例外の種類 TemplateDoesNotExist
例外値です。
インデックス/index.html
例外発生場所: djangotemplate⇄loader.py, line 19, in get_template
Python 実行可能ファイルです。F:\WorkspoacePyWork╱Pybookstore╱dist╱manage.exe
Pythonバージョン:3.7.8
Pythonのパス。
['C:\\Users\\\ja\\AppData\\\\Local\\\Temp\\\\_MEI25882\\\base_library.zip',
'C:\\Users\\\ja\\\AppData\\\Local\\\Temp\\\\_MEI25882\\\lib-dynload',
'C:\\Users\\\ja\\\AppData\\\Local\\\Temp\\\_MEI25882']
サーバーの時間です。火曜日、16 11月2021 03:13:35 +0000
テンプレートローダーの後処理
Django はこれらのテンプレートを、この順番で読み込んでみました。
エンジンdjangoを使用。
django.template.loaders.filesystem.Loader.Loader.Loader。C:\UsersjaAppDataLocal﹑Temp﹑MEI25882﹑templates﹑index.html (ソースが存在しません)
django.template.loaders.app_directories.Loader: C:\UsersjaAppData︓Local︓Temp_MEI25882︓django︓templates︓ .html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\UsersjaAppData︓Local︓Temp_MEI25882︓django︓templatesindex.html (ソースが存在しません)
この例では、templates フォルダを C:³³³ にコピーして、以下の場所に置きます。
4、プロジェクトにスタイルCSSとJSが不足している
理由 Pyinstaller はテンプレート(html ファイルファイル)を見つけることができますが、css と js ファイルを見つけることができません。
回避策
設定でdjangoの静的ファイルコレクションを構成する
# STATIC_ROOT = os.path.join(BASE_DIR, 'folder path')
静的ファイル収集コマンド
# python manage.py collectstatic
次に各アプリのurlに追加します。
# static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
# This sentence means to copy a static file from the STATIC_ROOT directory to the STATIC_URL path of the web page
静的ファイルのパッケージングを設定するために、.specファイルのdatasを修正します。
# F:\Workspoace\PyWork\bookstore\statics Address of the css, js static files to be packaged Relative to the location of the packaged to dist
# F:\Workspoace\PyWork\bookstore\templates Address of the html file template to be packaged Relative to the location packaged in the dist
# datas=[(r'F:\Workspoace\PyWork\bookstore\statics',r'. \statics'), (r'F:\Workspoace\PyWork\bookstore\templates', r'. \templates')],
注:ここでは、設定テンプレートは3番目のファイルのマイグレーションを行う必要がない上にパッケージ化されており、ここでは同期的にパッケージ化されています。
また、ここでは、django の構成ファイルの設定に小さな問題があります。
# STATICFILES_DIRS = [
# os.path.join(BASE_DIR, "statics"),
# ]
STATIC_ROOT = os.path.join(BASE_DIR, 'statics')
STATICFILES_DIRS と STATIC_ROOT は同時に使用できません。STATICFILES_DIRSが設定されている場合、コメントアウトしないとエラーが報告されます。
Pyinstallerのパッケージングツールの使い方と落とし穴の回避についての記事は以上です。Pyinstallerのパッケージングツールの詳細については、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。
関連
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】 tf.contrib.layers.xavier_initializer() を 2.0.0 に変更する。
-
PythonでRuntimeWarning: invalid value encountered in double_scalars問題を解決する方法
-
[解決済み] python はモジュールをインポートできるのに pytest はできない
-
[解決済み] flask コマンドが使用するホストとポートを変更するにはどうすればよいですか?
-
[解決済み] pandas dataframe インデックスのソート中に "TypeError: 'DataFrame' objects are mutable, therefore they cannot be hashed" が発生する。
-
[解決済み] "通常のsite-packagesが書き込み可能ではないため、ユーザーインストールをデフォルトとする" pythonメッセージ
-
[解決済み] Python-降雨統計
-
EnvironmentErrorのため、パッケージをインストールできませんでした。[Errno 28] デバイスに空き領域がありません。
-
エラー"[WinError 10061] ターゲットコンピューターがアクティブに拒否しているため接続できません "の解決策を紹介します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
[解決済み] __init__.py でも「非パッケージで相対的なインポートを試みた」を修正する方法
-
[解決済み] Python3 で dict_keys の要素にインデックスでアクセスする
-
[解決済み] TypeError: 'str' と 'list' オブジェクトをメールに連結することはできません。
-
[解決済み] TensorFlowでのメモリリーク
-
[解決済み] Python ベクトルクラス
-
[解決済み] UnicodeDecodeError: 'charmap' コーデックは位置 XXX のバイト 0x8f をデコードできません: char
-
[解決済み] logRecordのlevelnameのフォーマットを変更する
-
デバイスに不適切な ioctl がある (解決予定)
-
python pip command install pyinstaller failed prompting Installing build dependencies ... error.