Pyinstaller打包工具的使用以及避坑

2022-09-24 10:51:09 字數 4681 閱讀 9062

目錄

本篇部落格主要介紹的是www.cppcns.compyinstaller在windows下的基本使用和基礎避坑

在windows中使用pyinstaller工具打包時會出現乙個問題,在打包列表會看到這樣的警告資訊:

django.core.exceptions.improperlyconfigured: could not find the gdal library (tried "gdal302", "gdal301", "gdal300", "gdal204", "gdal203", "gdal202", "gdal201", "gdal20"). is gdal installed? if it is, try setting gdal_library_path in your settings.collect_submodules: failed to import 'django.contrib.gis.sitemaps'!

這種資訊不予理會就好了。

1、安裝pyinstall

# pip install pyinstaller

2、查詢程式需要的檔案

# 製作 .spec 檔案

# 進入專案目錄,執行命令:(還有其它引數:-f等, 建議使用-d)

# -d會在當前目錄下的dist目錄中生成資料夾,處理靜態檔案時比較方便

# pyi-makespec -d manage.py

3、生成.exe檔案

# 在manage.spec 同級目錄執行

# pyinstaller manage.spec

4、進入dist目錄執行專案

# 生成的exe可執行檔案 runserver --noreload

# mana程式設計客棧ge.exe runserver --noreload

出現原因:出現這種情況的原因主要是由於django有些module不會自動收集,需要手動新增

解決辦法:開啟生成的字尾名為.spec的檔案,在hiddenimports中新增報錯中沒有的模組

出現原因:主要是windows系統下gbk編碼的問題

解決辦法:開啟報錯資訊上面一行提示的錯誤檔案並跳轉到提示的錯誤行數上修改with open(),在裡面新增:encoding='utf-8' 即可

during handling of the above exception, another exception occurred:

traceback (most recent call last):

file "threading.py", line 890, in _bootstrap

file "threading.py", line 936, in _bootstrap_inner

file "traceback.py", line 167, in format_exc

file "traceback.py", line 121, in format_exception

file "traceback.py", line 521, in __init__

file "traceback.py", line 533, in _load_lines

file "traceback.py", line 533, in _load_lines

file "traceback.py", line 533, in _load_lines

[previous line repeated 2 more times]

file "traceback.py", line 531, in _load_lines

file "traceback.py", line 285, in line

file "linecache.py", line 16, in getline

file "linecache.py", line 47, in getlines

file "linecache.py", line 103, in updatecache

file "pyinstaller\loader\pyimod03_importers.py", line 299, in get_source

unicodedecodeerror: 'gbk' codec can't decode byte 0xa6 in position 11211: illegal multibyte sequence

上面是報錯示例,找到"pyinstaller\loader\pyimod03_importers.py"檔案,開啟並編譯第299行找到對應位置新增:encoding='utf-8'(注:修改前先備份好備份,以免誤操作找不回)

出現原因:templatedoesnotexist 這個是因為沒有找到templates檔案

解決辦法:根據錯誤提示將templates檔案新增至對應的路徑下,重新整理即可。

templatedoesnotexist at /index/

index/index.html

request method: get

request url:

django version: 3.2.9

exception type: templatedoesnotexist

exception value:

index/index.html

exception location: django\template\loader.py, line 19, in get_template

python executable: f:\workspoace\pywork\bookstore\dist\manage.exe

python version: 3.7.8

python path:

['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']

server time: tue, 16 nov 2021 03:13:35 +0000

template-loader postmortem

django tried loading these templates, in this order:

using engine django:

django.template.loaders.filesystem.loader: c:\users\ja\appdata\local\temp\_mei25882\templates\index\index.html (source does not exist)

django.template.loaders.app_directories.loader: c:\users\ja\appdata\local\temp\_m (source does not exist)

django.template.loaders.app_directories.loader: c:\users\ja\appdata\local\temp\_mei25882\django\contrib\auth\templates\index\index.html (source does not exist)

上面這種示例把template資料夾複製下來放到c:\users\ja\appdata\local\temp_mei25882\下面即可

出現原因:pyinstaller 能找到templates(html files檔案),但不能找到css和js程式設計客棧檔案

解決辦法:

在settings中配置django靜態檔案收集

# static_root = os.path.join(base_dir, '資料夾路徑')

靜態檔案收集命令

# python manage.py collectstatic

然後在各個app的url中新增:

# static.static(settings.static_url, document_root=settings.static_root)

# 這句話的意思就是將static_root目錄的靜態檔案複製乙份到網頁 static_url路徑下

在.spec檔案中修改datas,配置靜態檔案打包:

# f:\workspoace\pywork\bookstore\statics 要打包的css,js靜態檔案位址 相對應打包到dist中的位置

# f:\workspoace\pywork\bookstore\templates 要打包的html檔案模板位址 相對應打包到dist中的位置

# datas=[(r'f:\workspoace\pywork\bookstore\statics',r'.\statics'), (r'f:\workspoace\pywork\bookstore\templates', r'.\templates')],

注:這裡配置template打包上面的第3條檔案遷移就不需要做了,這裡同步打包了。

這裡還存在乙個小問題就是django的配置檔案settings中:

# staticfiles_dirs = [

# os.path.join(base_dir, "statics"),

# ]static_root = os.path.join(base_dir, 'statics')

staticfiles_dirs和static_root不能同時使用,如果配置了staticfiles_dirs需要注釋掉,不然會報錯。

打包工具pyinstaller

python setup.py install 安裝完後,檢查安裝成功與否 pyinstaller version 安裝成功後,就可以使用下面的命令了 pyinstaller 打包可執行檔案的主要命令,詳細用法下面會介紹。pyi archive viewer 檢視可執行包裡面的檔案列表。pyi bi...

pyinstaller打包工具簡單使用

python 指令碼如果在沒有安裝 python 的機器上不能執行,所以將指令碼打包成 exe檔案將可跨平台使用,那麼怎麼打包了,python 提供了專門的模組 pyinstaller 下面就介紹下怎麼用 1 安裝pyinstaller執行時所需要的windows拓展pywin32 2 安裝pyin...

vcpkg VC 打包工具

原文 引用 vcpkg 是微軟 c 團隊開發的在 windows 上執行的 c c 專案包管理工具,可以幫助您在 windows 平台上獲取 c 和 c 庫.vcpkg 自身也是使用 c 開發的 而其他的 c 包管理大多並不是 c 開發的 並且 vcpkg 能夠幫助使用者在 visual studi...