Pyinstaller 自己的模块上出现导入错误

Ufu*_*k A 4 python module pyinstaller

我在一个包中有两个彼此相邻的模块,如下所示:

main/
|--> __init__.py
|--> somePackageName/
    |--> __init__.py
    |--> module1.py
    |--> module2.py
Run Code Online (Sandbox Code Playgroud)

在模块 module1.py 中,我使用以下语句导入 module2.py:

from .module1 import *

当我运行时python -m somePackageName.module1,脚本工作得很好(命令从包外部执行)

我现在想用 pyinstaller 构建一个 .exe。执行后pyinstaller module1.spec我得到错误:

ImportError:尝试在没有已知父包的情况下进行相对导入
[15800] 无法执行脚本 module1

旁注:当我尝试python module1.py从包内部运行时,我遇到了同样的错误。
Sidenote2:我需要使用隐藏导入和/或附加钩子目录吗?

先感谢您。

Phi*_*e F 6

相对导入仅在包内有效。根据您的描述,我认为您正在将 module1.py 转换为 .exe,因此它不再位于包内。

您需要执行以下操作:

  • 在你的包之外有一个引导模块,它使用你的包设施
  • 在引导模块上调用 pyinstaller

这会产生类似的结果:

main/
|--> runme.py
|--> __init__.py
|--> somePackageName/
    |--> __init__.py
    |--> module1.py
    |--> module2.py
Run Code Online (Sandbox Code Playgroud)

你的 runme.py 会是这样的:

import module1.main
module1.main()
Run Code Online (Sandbox Code Playgroud)

然后你的 module1 导入将正常工作。

下一步是使用 pyinstaller 将 runme.py 打包为可执行文件。我刚刚测试过,效果很好。