【问题标题】:python pyinstaller create single file import directorypython pyinstaller 创建单个文件导入目录
【发布时间】: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


【解决方案1】:

好的,不知道为什么,但我刚刚在 windows 中创建了一个新文件夹,使用与以前相同的文件夹结构复制了我的所有 .py 文件,然后它就可以工作了。唯一缺少的是所有 Pycharm 文件夹,例如 .git、.idea 和 pycache

我在故障排除中确实注意到,如果我将库重命名为“test”之类的其他内容并更新了我的导入行,当我执行构建的 .exe 时,它​​仍然会引用模块“library”。

我知道我所做的一切都是正确的,但似乎 py charm 放入的其他文件夹之一中可能有一些东西。

所以我每次都将我的所有文件复制到新文件夹并删除我看到的所有文件夹/文件,而不是所需的 .py。

【讨论】:

    【解决方案2】:

    在我的情况下,我将 from library.app_ext1 import get_info 替换为 from your_newly_created_folder_name.library.app_ext1 并且它有效:D

    我注意到app_root 名称必须更改为新创建的文件夹名称。刚刚创建了一个新文件夹,复制所有 .py 文件并保持文件夹结构。我希望你不会再像我一样在这上面浪费时间了

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 2019-09-27
      • 2017-09-12
      • 2021-08-17
      • 2020-04-17
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多