py2exe无法从其他目录导入Module

时间:2011-04-27 12:03:49

标签: python py2exe

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

some_Mod.py
some_dir/another_dir/some_Mod.py

在后者内部some_dir / another_dir / some_Mod.py我试图用

导入其他Python模块
from ..some_Mod import *

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

 ImportError: No module named some_Mod

有人可以解释原因吗?

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

我现在不确定py2exe现在如何处理from ..some_Mod import *语法,请检查这一点以确保some_Mod.py模块已正确打包:python -m py2exe.mf -d some_dir/another_dir/some_Mod.py,如py2exe FAQ中所述