我使用 pyinstaller 从我的 python 项目中制作了一个 exe 文件。当我尝试执行 EXE 文件时,我遇到了以下错误。
Traceback (most recent call last):
File "main.py", line 7, in <module>
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
File "prophet\__init__.py", line 12, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ERWIN\\AppData\\Local\\Temp\\_MEI188562\\prophet\\__version__.py'
我在 pyinstaller 过程中遇到了各种警告,指出正在使用“冻结模块”,您可以解决问题。它还提到您可以将以下命令传递给 python 以禁用此功能。
python -m main.exe -Xfrozen_modules=off
这实际上是有效的。当我在执行 EXE 时在 CMD 中输入此命令时,应用程序运行正常。现在我不知道这个“冻结模块”是什么,但我知道每次你想打开应用程序时传递这个命令非常不方便。
我也不想使用任何其他东西来修复这(例如批处理文件)具体是因为我想将此应用程序转换为设置。
我尝试更改规范文件,更改代码本身以使其自动执行此命令,甚至制作批处理文件。这些都不起作用。
一如既往地感谢任何帮助。
遇到的问题与 PyInstaller 的冻结模块功能有关,该功能旨在通过将模块捆绑到可执行文件中来加速导入时间。但是,正如所发现的那样,它有时会导致问题,尤其是在涉及动态生成文件或版本的模块时,例如
prophet
似乎正在做的那样。
尽管
-Xfrozen_modules=off
参数有效,但每次运行 EXE 时手动添加它都不是理想的解决方案。以下是更永久的解决方法:
1. 使用
--hidden-import
标志:
PyInstaller 可能无法自动检测到
prophet
的所有依赖项。可以使用
--hidden-import
标志在构建时明确包含它们:
bash
pyinstaller --hidden-import=prophet.__version__ -F main.py
如果还有其他缺失的模块,请将它们也添加到
--hidden-import
标志中。
2. 更新 PyInstaller:
如果使用的是旧版本的 PyInstaller,请尝试更新到最新版本。较新版本可能包含针对此类问题的错误修复和改进:
bash
pip install --upgrade pyinstaller
3. 使用
spec
文件:
spec
文件提供对 PyInstaller 构建过程的精细控制。可以修改它以永久禁用冻结模块:
```python # 在你的 .spec 文件中 a = Analysis(...)
# 在 Analysis 对象中添加以下行 a.freeze_modules = False
pyz = PYZ(...) exe = EXE(...) ```
进行此更改后,使用
spec
文件构建的应用程序:
bash
pyinstaller your_app.spec
4. 修改 prophet 包(不推荐):
作为最后的手段,如果
prophet
包中有一个选项可以禁用其动态版本控制或文件生成,可以探索该选项。但是,修改第三方包通常不是一个好主意,因为它可能会导致意外问题,并且在更新包时会使维护变得复杂。
解决问题后:
-
清理构建文件:
在每次尝试不同的解决方案后,删除
build
和dist
文件夹以及.spec
文件。这确保使用干净的状态进行构建。 - 测试: 彻底测试的应用程序,以确保所选解决方案已解决该问题,并且的应用程序按预期工作。
希望这些解决方案之一可以帮助解决这个问题!如果有任何其他问题,请告诉我。
标签:python,pyinstaller,exe From: 78766727