我将 python 源代码与 py2exe 捆绑在一起。目录结构如下:
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 不能处理这个星座。
如果你有__init__.py
如果每个子目录中都有文件,那么所有导入语句都应该正常工作。
假设这不是问题,这里有一个导入最佳实践的优秀指南:
http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/ http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/
总之,永远不要使用相对导入 - 始终使用绝对导入(请参阅上面的链接了解原因)。
其次(我不完全确定为什么),始终将 py2exe setup.py 脚本保存在主脚本所在的确切文件夹中。我尝试修改 py2exe 的“脚本”选项以允许我的脚本位于其他地方......但你的确切问题发生在我身上。因此,请尝试确保它位于主脚本所在的位置。
最后,你总是可以给 py2exe 一点帮助。我通常必须将根目录添加到系统路径中,以便导入语句有效。注意,我没有修改sys.path
in any我的应用程序代码 - 只有我用来构建 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
一般来说,我不导入包,在它们通常存在的地方添加项目根就足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)