py2exe无法从其他目录导入Module

Ber*_*olt 2 python py2exe

我正在使用py2exe捆绑python源代码.目录结构如下:

some_Mod.py
some_dir/another_dir/some_Mod.py
Run Code Online (Sandbox Code Playgroud)

在后者内部some_dir/another_dir/some_Mod.py我试图导入其他Python模块

from ..some_Mod import *
Run Code Online (Sandbox Code Playgroud)

使用导入导致python解释器没有问题,但如果我在捆绑包中运行相同的星座,我会得到一个异常:

 ImportError: No module named some_Mod
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下原因吗?

备注:重命名模块实际上没问题,但我只是想知道,为什么py2exe无法处理这个星座.

eco*_*coe 5

如果__init__.py每个子目录中都有文件,则所有import语句都应正常工作.
假设这不是问题,这里是导入最佳实践的优秀指南:

http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/

总之,永远不要使用相对导入 - 总是绝对的(请参阅上面的链接了解原因).

第二个(我不完全确定为什么),始终将py2exe setup.py脚本保存在主脚本所在的确切文件夹中.我已经尝试修改py2exe的'script'选项以允许我的脚本在其他地方......但你的确切问题发生在我身上.因此,请尝试确保它是正确的主脚本.

最后,你总是可以给py2exe一些帮助.我通常必须将根目录添加到系统路径,以便import语句有效.注意,我没有sys.path在我的任何应用程序代码中修改- 只有我用来构建exe的py2exe脚本.

在我的py2exe安装脚本的顶部:

import sys
sys.path.append(PATH_WHERE_PACKAGES_ARE)
# add any packages that need explicit importing here located in root directory:
import package1 # apparently it wasn't found...
import package2 # apparently same thing
Run Code Online (Sandbox Code Playgroud)

通常我不会导入包,通常将项目根添加到它们所在的位置就足够了.