一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Pyinstaller打包工具的使用以及避坑

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

2022-03-06 00:15HashFlag Python

本文主要的是pyinstaller在windows下的基本使用和基礎避坑,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本篇博客主要介紹的是pyinstaller在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

?
1
# pip install pyinstaller

2、查找程序需要的文件

?
1
2
3
4
# 制作 .spec 文件
# 進入項目目錄,執行命令:(還有其它參數:-F等, 建議使用-D)
# -D會在當前目錄下的dist目錄中生成文件夾,處理靜態文件時比較方便
# pyi-makespec -D manage.py

3、生成.exe文件

?
1
2
# 在manage.spec 同級目錄執行
# pyinstaller manage.spec

4、進入dist目錄運行項目

?
1
2
# 生成的exe可執行文件 runserver --noreload
# manage.exe runserver --noreload

二、基本錯誤處理

1、當運行exe后出現提示:No module named XXX

出現原因:出現這種情況的原因主要是由于Django有些module不會自動收集,需要手動添加

解決辦法:打開生成的后綴名為.spec的文件,在hiddenimports中添加報錯中沒有的模塊

2、當運行出現報錯:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte

出現原因:主要是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'(注:修改前先備份好備份,以免誤操作找不回)

3、當運行出現這種報錯:TemplateDoesNotExist at /index/

出現原因:TemplateDoesNotExist 這個是因為沒有找到templates文件

解決辦法:根據錯誤提示將templates文件添加至對應的路徑下,刷新即可。

TemplateDoesNotExist at /index/
index/index.html
Request Method: GET
Request URL: http://127.0.0.1:8000/index/
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\_MEI25882\django\contrib\admin\templates\index\index.html (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\下面即可

4、項目缺少樣式css和js

出現原因:Pyinstaller 能找到templates(html files文件),但不能找到css和js文件

解決辦法:

在settings中配置django靜態文件收集

?
1
# STATIC_ROOT = os.path.join(BASE_DIR, '文件夾路徑')

靜態文件收集命令

?
1
# python manage.py collectstatic

然后在各個app的url中添加:

?
1
2
# static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
# 這句話的意思就是將STATIC_ROOT目錄的靜態文件復制一份到網頁 STATIC_URL路徑下

在.spec文件中修改datas,配置靜態文件打包:

?
1
2
3
# 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中:

?
1
2
3
4
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "statics"),
# ]
STATIC_ROOT = os.path.join(BASE_DIR, 'statics')

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

到此這篇關于Pyinstaller打包工具的使用以及避坑的文章就介紹到這了,更多相關Pyinstaller打包工具內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/wylshkjj/p/15560983.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 情人梁家辉在线 | 高清国产在线观看 | 国产欧美日韩精品在线 | 性福演算法 | 国产精品久久久久jk制服 | 国内精品久久久久久久久久久久 | 国产精品福利在线观看秒播 | 亚洲精品丝袜在线一区波多野结衣 | 欧美xxxxx性| 成人啪精品视频免费网站 | 国产大胆歌舞团网站 | 变态 另类 国产 亚洲 | 欧美亚洲天堂网 | 青草国内精品视频在线观看 | 羞羞麻豆国产精品1区2区3区 | 日本人添下面的全过程 | 窝窝影院午夜色在线视频 | 久久精品午夜一区二区福利 | 521色香蕉网在线观看免费 | 天堂一区二区在线观看 | s0e一923春菜花在线播放 | 超碰97| 免费一看一级毛片人 | 国产真实乱子伦xxxxchina | 日本黄色大片网站 | 九九精品免视看国产成人 | 日本人泡妞18xxⅹ | 513热点 | 国产亚洲综合精品一区二区三区 | 欧美milk大超乳 | 无码AV免费精品一区二区三区 | 日韩在线二区 | 色偷偷影院 | 久久黄视频 | 午夜熟女插插XX免费视频 | 国产高清在线播放免费观看 | 国产成人啪精品午夜在线播放 | 无耻之徒第十一季在线观看 | 欧美精品一区视频 | 亚州性夜夜射在线观看 | 日本高清视频网站 |