網站首頁 編程語言 正文
現象:
最近將pyinsatller升級到最新的Version: 5.0.1版本后(之前一直用的是3.5版本同樣方法未遇到問題,今次更新到最新版本后5.0.1后打包就遇到問題,具體是這中間哪個版本開始有變化也不清楚了,也不去追究,凡是在新版本中遇到問題就在新版本中解決),詳細現象及解決辦法如下:
1。 先貼上pyinstaller的官方介紹:點擊跳轉
2。使用pyinstaller打包完成后到dist目錄下點擊 .exe程序運行時提示 “no module found”,凡是所有外部加載的模塊全部無法識別到,然后單獨將對應的包放到該dist目錄下再運行則問題消失,表明在打包時未正常對應目錄所依賴的模塊加載進去
3。先來看打包命令,我是使用批處理,跟 .py的主文件(即可運行主窗口文件)在同一目錄
@echo off
echo Current Dish:%~d0
echo Current Dish and Path:%~dp0
echo Current CMD default Dir:"%cd%"
set "current_dir=%~dp0"
echo %current_dir%
set "output_dir=%current_dir%"
cd %output_dir%
;echo "%cd%"
pyinstaller.exe -D -w %current_dir%\SmartTools.py -i %current_dir%\icon\Tool.ico
pause
4。pyinstaller打包的時候會首先生成一個spec文件,我們可以手工去修改這個文件,下次打包指定用這個文件。它的好處是:里面可以寫更復雜的選項,也可以重復利用,這個方法我是在pyinstaller 3.5版本中這么用的,但在pyinstaller5.0.1版本中卻會每次重新覆蓋掉我所修改的spec文件,導致該pathex每次為空,所以在打包時就不會將py文件中所引用的文件加載進去進行編輯打包,關于該pathex參數解釋可以到第一步的官方中去查找,下面我截圖出來給你們看(明確告訴我們該參數主要就是文件中關于imports導模塊所需路徑)
5。那到這里就已經知道問題出在哪里了,但要如何處理才能將spec文件中的pathex中帶上當前地址呢,上面也已經給出的明確的答案,就是在pyinstaller后面帶上 --paths參數,現修改編輯打包文件如下(紅色字體為新增部分):
@echo off
echo Current Dish:%~d0
echo Current Dish and Path:%~dp0
echo Current CMD default Dir:"%cd%"
set "current_dir=%~dp0"
echo %current_dir%
set "output_dir=%current_dir%"
cd %output_dir%
;echo "%cd%"
pyinstaller.exe --paths %current_dir% -D -w %current_dir%\SmartTools.py -i %current_dir%\icon\Tool.ico
pause
6。重新運行該批處理后再去檢查 spec文件,查看pathex是否已經將對應目錄添加上,經確認該參數中已經有值了,為一個列表
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['E:\\SmartTools\\\\SmartTools.py'],
pathex=['E:\\SmartTools\\'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
7。 重新到dist目錄下去執行 .exe程序,正常啟動未報任何錯誤,到此問題成功解決。
原文鏈接:https://www.cnblogs.com/aziji/p/16254288.html
相關推薦
- 2022-11-27 使用Docker搭建Apache?Kafka環境的詳細過程_docker
- 2022-04-20 Android實現將View轉化為圖片并保存到本地_Android
- 2021-11-21 CentOS7環境中DHCP配置教程_Linux
- 2022-09-16 Firewalld防火墻安全防護_網絡安全
- 2023-05-23 Golang拾遺之實現一個不可復制類型詳解_Golang
- 2022-06-20 C語言三種方法解決輪轉數組問題_C 語言
- 2022-03-17 解決.Net?Core項目發布在IIS上訪問404的問題_實用技巧
- 2022-01-15 cURL error 60: SSL certificate problem: unable to
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支