【问题标题】:File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module, ModuleNotFoundError: No module named 'x'exec_module 中的文件“PyInstaller/loader/pyimod03_importers.py”,第 546 行,ModuleNotFoundError:没有名为“x”的模块
【发布时间】:2021-10-26 12:28:59
【问题描述】:

编辑

我正在尝试将algosec.models 导入到algobot 包内的文件中。

我尝试添加--hidden-import algosec,我也尝试在导入之前添加路径,使用sys.path.append(./../algosec) 这是我尝试运行程序时收到的错误消息:

Traceback (most recent call last):
  File "algobot_packer/algobot.py", line 2, in <module>
  File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module
  File "algobot/cli/cli.py", line 3, in <module>
  File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module
  File "algobot/microsoft_teams/mainloop.py", line 9, in <module>
  File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module
  File "algobot/framework/configuration.py", line 34, in <module>
  File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module
  File "algobot/framework/commands.py", line 22, in <module>
  File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module
  File "algobot/framework/bot.py", line 4, in <module>
  File "PyInstaller/loader/pyimod03_importers.py", line 546, in exec_module
  File "algobot/framework/responses.py", line 9, in <module>
ModuleNotFoundError: No module named 'algosec'

文件夹结构为:

  • algobot
    • 算法机器人
    • algosec
    • algobot-packer
    • pyucwa

我正在使用pyinstaller 版本4.2 自从上次我的可执行文件运行得很好以来,我没有对代码进行任何更改,但现在我每次都遇到这个错误。 问题是 - 文件夹 'algosec' 是我项目中的一个子目录,它在 pipfile 中有记录,我有一段时间没有做任何更改并最近对其进行了测试(最后一次测试是在 7 月 8 日)), 因此我认为这是一个依赖问题,但不确定要解决哪个或如何解决。

我尝试了多项更改,但在一次运行中以某种方式起作用,但是当我再次尝试进行这些更改时,它在其他版本上失败了...

【问题讨论】:

标签: python python-3.x pyinstaller pipfile


【解决方案1】:

您可以使用
--add-data "path_to_algobot:."
根据您的系统,windows 使用 ;linux 使用 :

它会将您的 algosec 文件夹显式添加到包中。

【讨论】:

  • path_to_algobot 你的意思是项目文件夹的路径? (包含 4 个子文件夹的那个?)另外,:. 点代表目的地。你能解释一下 src/dest 的含义吗?我已经尝试了几件不起作用的事情。它是在 pipenv 环境中的 docker 上构建的。
  • 另外,你知道为什么会发生这种情况吗?
  • path_to_algobot 表示 path_to_missing_filesrc 代表丢失文件的来源,这意味着从哪里复制它,dest 代表将该文件放入包中的位置。是的,. 代表目的地,你也可以用你的路径代替.。因为您没有共享很多代码。但根据我的经验,这是由于 pyinstaller 在打包捆绑包时无法找到这些文件。
  • 似乎在找到正确的路径组合并使用 --add-data 标志后,我得到了另一个 ModuleNotFoundError 用于我正在使用的 zeep 包。它在 setup.py 中,应该导入(之前工作过)有什么线索吗?
  • @Daniel 这是 pyinstaller 的一个很常见的问题。您只需要继续使用--add-data 添加丢失的文件并使用--hidden-imports 添加丢失的导入/模块。我一直在使用 pyinstaller,我所做的就是不断重复上述步骤,直到捆绑包开始工作。
【解决方案2】:

显然,由于我采用了最高版本的zeepdeprecated 而没有给出固定版本,因此由于版本较新而引起了问题。 我必须将它们添加到algobot 包的setup.py 中,该包是具有固定版本的可执行文件的主包。

此外,我必须添加 algosec 包的 .egg 文件和 --paths,以便 pyinstaller 找到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多