Python Pyinstaller在自己的模块上运行

Python Pyinstaller在自己的模块上运行,python,module,pyinstaller,Python,Module,Pyinstaller,我在一个包中有两个模块彼此相邻,如下所示: main/ |--> __init__.py |--> somePackageName/ |--> __init__.py |--> module1.py |--> module2.py 在module1.py中,我将使用以下语句导入module2.py: from.module1导入* 当我运行python-msomepackagename.module1时,脚本运行得很好(从包外部执行命令)

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

main/
|--> __init__.py
|--> somePackageName/
    |--> __init__.py
    |--> module1.py
    |--> module2.py
在module1.py中,我将使用以下语句导入module2.py:

from.module1导入*

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

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

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

旁注:当我试图从包内部运行
python module1.py
时,我会遇到相同的错误。
Sidenote2:我是否需要使用隐藏导入和/或附加挂钩目录?


提前感谢。

相对导入仅在包内工作。从您描述的内容来看,我认为您正在将module1.py转换为.exe,因此它不再位于包中

您需要执行以下操作:

  • 在您的包之外有一个引导模块,它使用您的包设施
  • 在引导模块上调用pyinstaller
这将产生如下结果:

main/
|--> runme.py
|--> __init__.py
|--> somePackageName/
    |--> __init__.py
    |--> module1.py
    |--> module2.py
您的runme.py如下所示:

import module1.main
module1.main()
然后模块1导入将正常工作

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