一個關於pyinstaller的 pathex 參數所引發的打包執行報no module name的異常錯誤

来源:https://www.cnblogs.com/aziji/archive/2022/05/10/16254288.html
-Advertisement-
Play Games

現象: 最近將pyinsatller升級到最新的 Version: 5.0.1版本後(之前一直用的是3.5版本同樣方法未遇到問題,今次更新到最新版本後5.0.1後打包就遇到問題,具體是這中間哪個版本開始有變化也不清楚了,也不去追究,凡是在新版本中遇到問題就在新版本中解決),詳細現象及解決辦法如下: ...


現象:

最近將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是否已經將對應目錄添加上,經確認該參數中已經有值了,為一個列表

 1 # -*- mode: python ; coding: utf-8 -*-
 2 
 3 
 4 block_cipher = None
 5 
 6 
 7 a = Analysis(
 8     ['E:\\SmartTools\\\\SmartTools.py'],
 9     pathex=['E:\\SmartTools\\'],
10     binaries=[],
11     datas=[],
12     hiddenimports=[],
13     hookspath=[],
14     hooksconfig={},
15     runtime_hooks=[],
16     excludes=[],
17     win_no_prefer_redirects=False,
18     win_private_assemblies=False,
19     cipher=block_cipher,
20     noarchive=False,
21 )

 

 7。 重新到dist目錄下去執行 .exe程式,正常啟動未報任何錯誤,到此問題成功解決。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring Bean 的創建過程介紹了FactoryBean 的創建方式,那麼接下來介紹不是FactoryBean的創建方式,在創建過程中,又會分為單例的Bean的創建,原型類型的Bean的創建等。一般來說在Spring中幾乎所有對象都是單例創建的,除非有其他業務需要設置為其他作用域的Bean,所 ...
  • 動態規劃 [P1216 USACO1.5][IOI1994]數字三角形 Number Triangles - 洛谷 | 電腦科學教育新生態 (luogu.com.cn) 題目描述 觀察下麵的數字金字塔。 寫一個程式來查找從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的 ...
  • 前言 作為目前全世界最大的視頻網站,它幾乎全是用Python來寫的 該網站當前行業內線上視頻服務提供商,該網站的系統每天要處理上千萬個視頻片段,為全球成千上萬的用戶提供高水平的視頻上傳、分發、展示、瀏覽服務。 2015年2月,央視首次把春晚推送到該網站。 今天,我們就要用Python來快速批量下載該 ...
  • 在開發中,遇到這樣一個需求,在介質資料新增時,需要生成一個介質編號,格式為"JZ+yyyyMMDD+4位遞增數字" 先是使用百度找尋解決方法。解決方法 裡面的查詢緩存的方法在我這項目里沒有,我也不會寫。就自己想了個折中的方法,再請求這個介面的時候,先去資料庫查詢MAX(id),如果有,就在此基礎上+ ...
  • 前言 當前的主瀏覽器都支持直接打開pdf文件,從而實現文件預覽。如果是其他格式文件則得下載,因此用openOffice實現文件轉pdf格式。 一、 openOffice的安裝 下載地址:http://www.openoffice.org/ 安裝教程可參考:openOffice下載和安裝 進入安裝目錄 ...
  • 本文只是通過一個實例來講述如何獲得python中所有的單字元的字母表,不僅僅是局限於英文的abcd,可能還有其他語言如ᵝᵞᵟᵠ等。在實際寫python的過程中可能不一定用得到,但是不失為一個挺有趣的功能探索。 ...
  • 在C/C++中有個叫指針的玩意存在感極其強烈,而說到指針又不得不提到記憶體管理。現在時不時能聽到一些朋友說指針很難,實際上說的是記憶體操作和管理方面的難。(這篇筆記咱也會結合自己的理解簡述一些相關的記憶體知識) 最近在寫C程式使用指針的時候遇到了幾個讓我印象深刻的地方,這裡記錄一下,以便今後回顧。 “經一 ...
  • 面向對象和麵向過程的區別 區別簡述 面向過程(Procedure Oriented):以過程為核心,強調**事件的流程、順序,**如:C語言。 面向對象(Object Oriented):以對象為核心,強調**事件的角色、主體,**如:C++、Java。 區別 1.思路不同 2.特點不同 3.優勢不 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。 感謝@時總百忙之中的指導。 布隆過濾器簡介 布隆過濾器(Bloom filter)是一種特殊的 Hash Table,能夠以較小的存儲空間較快地判斷出數據是否存在。常用於允許一定誤判率的數據過濾及防止緩存 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 「簡單有價值的事情長期堅持做」 這是成功最簡單,但也最難學的秘訣。不經過訓練,人很難意識到時間複利的威力。 仙劍奇俠傳的「十里坡劍神」和金庸群俠傳的「十級野球拳」,就是簡單的事情持之以恆反覆做,最後就有巨大的威力 唐家三少成為網文收入第一,最重要的一步是十四年從未斷日更 這樣的案例很多,一開始可能成 ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 看你簡歷上面寫著精通MySQL,我先問你事務的特性是什麼? 老生常談,這個還有誰不會背的嗎? 我: ...
  • 基礎知識 python是一門腳本語言,它是解釋執行的。 python使用縮進做為語法,而且python2環境下同一個py文件中不能同時存在tab和空格縮進,否則會出錯,建議在IDE中顯示縮進符。 python在聲明變數時不寫數據類型,可以type(xx)來獲取欄位的類型,然後可以int(),list ...
  • 為什麼要多線程下載 俗話說要以終為始,那麼我們首先要明確多線程下載的目標是什麼,不外乎是為了更快的下載文件。那麼問題來了,多線程下載文件相比於單線程是不是更快? 對於這個問題可以看下圖。 橫坐標是線程數,縱坐標是使用對應線程數下載對應文件時花費的時間,藍橙綠代表下載文件的大小,每個線程下載對應文件2 ...
  • 詳細講解python爬蟲代碼,爬微博搜索結果的博文數據。 爬取欄位: 頁碼、微博id、微博bid、微博作者、發佈時間、微博內容、轉發數、評論數、點贊數。 爬蟲技術: 1、requests 發送請求 2、datetime 時間格式轉換 3、jsonpath 快速解析json數據 4、re 正則表達式提... ...
  • 背景: 一般我們可以用HashMap做本地緩存,但是HashMap功能比較弱,不支持Key過期,不支持數據範圍查找等。故在此實現了一個簡易的本地緩存,取名叫fastmap。 功能: 1.支持數據過期 2.支持等值查找 3.支持範圍查找 4.支持key排序 實現思路: 1.等值查找採用HashMap2 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本章是系列文章的第八章,用著色演算法進行寄存器的分配過程。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 寄存器分配 寄存器分配是為程式處理的值找到存儲位置的問題 這些值可以存放到寄存器,也可以存放在記憶體中 寄存器更快,但數量有限 記憶體很多,但 ...