【发布时间】:2017-10-09 20:25:09
【问题描述】:
我使用 pyinstaller 使用单个 .py 文件为 Windows 创建了单个 .exe,它运行良好。现在我变得更复杂了,并创建了多个 .py 文件,这些文件存储在我的 main.py 下的文件夹中。我已经阅读了 pyinstaller 指南,但我似乎没有什么工作..
我在windows中的文件夹结构如下,我只是用一个简单的例子来说明:
app_root\main.py
app_root\__init__.py
\library\__init__.py
\library\app_ext1.py
\library\app_ext2.py
\library\test\__init__.py
\library\test\app3.py
在 main.py 中,我从
导入代码from library.app_ext1 import get_info
from library.app_ext2 import get_data
from library.test.app3 import get_test
所以我使用我的 .spec 文件将 pyinstaller 运行到我的 main.py。 在 .spec 文件中我有
hiddenimports=['library']
pyinstaller 没有完成任何错误并创建我的单个 .exe,但是当我运行我的单个 .exe 时出现以下错误
C:\Users\user1\Desktop\1_file\dist>main.exe
Traceback (most recent call last):
File "app_root\main.py", line 2, in <module>
ImportError: No module named 'library'
Failed to execute script main
我只使用一个 .py 文件编写了一个测试脚本,它正在使用 openpyxl(一个 python excel 库)做一些简单的工作,所以在我的测试 .py 文件中我有“import openpyxl”,所以在我的规范文件中我用过
hiddenimports=['openpyxl']
工作正常,但 openpyxl 是使用 pip 安装的 python lib,我想我不完全理解如何导入我自己的模块/脚本,我已经创建并存储在我的主 .py 脚本文件下的文件夹结构中我在我的 .py 脚本文件之间引用,就像我上面的例子一样。
如何让 pyinstaller 识别我正在导入的 .py 脚本?
【问题讨论】:
-
您的包(文件夹)中缺少
__init__.py文件。 -
不,它们在那里,抱歉我没有把它们放在示例中。所以我的脚本和脚本通过导入链接在一起的所有.py文件,它在python和pycharm调试它都运行良好,一切正常。所以我不确定为什么 pyinstaller 不起作用
-
您应该更新上面的列表。
-
我刚刚做了 :)
-
我需要在规范文件中有这个吗? hiddenimports=['get_info','get_data','get_test'] 显然这是一个例子,如果需要的话,我会有很多条目......我想我可以将它指向文件夹“库”在规范文件中。
标签: python pyinstaller