Python .exe 包含活动进度条错误 (FileNotFound)

问题描述 投票:0回答:4

我使用 pyinstaller 命令 pyinstaller --console 将包含活动进度条包

https://pypi.org/project/alive-progress/
的 .py 文件转换为适用于 Windows 的 .exe。但是,当我运行该程序时,我收到错误。它运行良好,直到调用活动栏,然后打印出下面的错误。

Traceback (most recent call last):
  File "network_nodes_ping.py", line 38, in <module>
  File "alive_progress\core\progress.py", line 106, in alive_bar
  File "alive_progress\core\configuration.py", line 149, in create_context
  File "alive_progress\core\configuration.py", line 183, in lazy_init
  File "alive_progress\core\configuration.py", line 14, in _spinner_input_factory
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "alive_progress\styles\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "alive_progress\styles\exhibit.py", line 9, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "alive_progress\styles\internal.py", line 126, in <module>
  File "alive_progress\styles\internal.py", line 12, in create_spinners
  File "alive_progress\animations\spinners.py", line 43, in frame_spinner_factory
  File "alive_progress\animations\spinners.py", line 43, in <genexpr>
  File "alive_progress\animations\spinners.py", line 43, in <genexpr>
  File "alive_progress\utils\cells.py", line 145, in to_cells
  File "alive_progress\utils\cells.py", line 149, in split_graphemes
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "grapheme\__init.py", line 9, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "grapheme\api.py", line 2, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "grapheme\finder.py", line 3, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "grapheme\grapheme_property_group.py", line 97, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\BRYANV~1\\AppData\\Local\\Temp\\_MEI85082\\grapheme\\data/grapheme_break_property.json'
[13328] Failed to execute script 'network_nodes_ping' due to unhandled exception!
python windows package pyinstaller executable
4个回答
4
投票

@Pluckerpluck 建议的更短替代方案是使用

--collect-data grapheme
而不是
--add-data <...>


1
投票

alive-progress
使用名为
grapheme
的库。该库需要一个 JSON 文件,您在使用 PyInstaller 时必须手动指定该文件。

就我而言,我将其放在

.venv
下,因此完成这项工作的命令是:

pyinstaller -F --add-data ".\.venv\Lib\site-packages\grapheme\data\grapheme_break_property.json;grapheme\data" my_file.py

请注意,参数

--add-data
同时采用源目录和目标目录(我们将其设置为
grapheme\data

但是,我会警告您,默认终端没有能够实际显示进度条的字体。它有效,但看起来不太漂亮。如果您从适当的终端运行

.exe
,尽管有字体支持,那么在此之后它就可以正常工作了。


1
投票

如果您使用 .spec 文件生成 exe - 这与 @Pluckerpluck 所说的类似,但您需要像这样包含此文件

datas=[(r"C:\Source\venv\Lib\site-packages\grapheme", "grapheme/")]

如果您将其添加到您的 .spec 文件中。它有效。


0
投票

CLI 只需添加字素数据,如

pyinstaller -F "Hello World.py" --collect-all grapheme

© www.soinside.com 2019 - 2024. All rights reserved.