簡體   English   中英

Pyinstaller 無法導入 scipy.signals

[英]Pyinstaller failed to import scipy.signals

嘗試使用導入的模塊 scipy.signals 從 python scipt 創建 exe 文件。 Pyinstaller 運行良好,沒有錯誤,但新的 .exe 文件給了我如下錯誤:

Failed to decode wchar_t from UTF-8
MultiByteToWideChar: ╬сырёЄ№ фрээ√ї, яхЁхфрээр  яю ёшёЄхьэюьє т√чютє, ёыш°ъюь ьрыр.
share\jupyter\lab\staging\node_modules\.cache\terser-webpack-plugin\content-v2\sha512\2e\ba\cfce62ec1f408830c0335f2b46219d58ee5b068473e7328690e542d2f92f2058865c600d845a2e404e282645529eb0322aa4429a84e189eb6b58c1b97c1a could not be extracted!

但是當我從 py 文件中更改行時

from scipy imports signals

import scipy

exec 文件表現出色。 有什么建議?

打包使用xarray的腳本時,我遇到了類似的問題。 解決方案是找出哪個包正在導入jupyter ,並將其添加到jupyter -modules列表中。 就我而言,我排除了dask ,但在您的情況下,情況會有所不同。

我將使用--log-level DEBUG重新運行您的 pyinstaller 命令以獲得更多日志信息,然后查看build/目錄中生成的日志文件。 如果您有graphviz或知道如何使用圖形,那么您可以分析.dot文件以了解安裝jupyter/IPython的軟件包。 如果您不知道如何使用graphviz ,沒問題,只需在瀏覽器中打開 html 文件即可。 該文件顯示了您的腳本導入的所有包,以及這些包導入和導入的所有包等。請注意,這是一個非常復雜的包 A 導入網絡......包 A 是由... ,所以不要迷失在細節中。

這里的目標是找到從您的腳本到導致此問題的IPython/jupyter的導入路徑 您想在對您的腳本來說合乎邏輯的任何地方停止此路徑 在你的情況下,許多scipy子包導入matplotlib.pyplot ,它導入IPython ,它導入最終導入jupyter_client東西。 您希望通過排除其中一個包來盡早切斷從腳本到jupyter/IPython 的這條路徑。 您決定排除的包將取決於您的應用程序。

擺脫此錯誤的最簡單方法是通過排除matplotlib來切斷從腳本到jupyter路徑 但是,如果您在腳本中使用 matplotlib 來生成繪圖,則不能這樣做。 您將不得不選擇更下游的包。 最終你可以排除IPython ,這應該可以解決問題。 查看 pyinstaller 文檔以了解如何使用--exclude-module參數:

https://pyinstaller.readthedocs.io/en/stable/usage.html#what-to-bundle-where-to-search

或者這個stackoverflow question有更多信息:

如何從 pyInstaller 中刪除/排除模塊和文件?

附帶說明一下,您應該開始習慣排除不必要的包,因為這可以大大減少捆綁應用程序的大小並提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM