Python py2exe无法从其他目录导入模块
我正在将python源代码与py2exe捆绑在一起。目录结构如下:Python py2exe无法从其他目录导入模块,python,py2exe,Python,Py2exe,我正在将python源代码与py2exe捆绑在一起。目录结构如下: some_Mod.py some_dir/another_dir/some_Mod.py 在后面的some_dir/other_dir/some_Mod.py中,我试图导入另一个Python模块 from ..some_Mod import * 使用导入不会导致python解释器出现问题,但如果在捆绑包中运行相同的星座,则会出现异常: ImportError: No module named some_Mod 有人能解释
some_Mod.py
some_dir/another_dir/some_Mod.py
在后面的some_dir/other_dir/some_Mod.py中,我试图导入另一个Python模块
from ..some_Mod import *
使用导入不会导致python解释器出现问题,但如果在捆绑包中运行相同的星座,则会出现异常:
ImportError: No module named some_Mod
有人能解释一下原因吗
备注:重命名模块实际上没有问题,但我只是想知道,为什么py2exe不能处理这个星座。我不确定py2exe现在如何处理来自..的
语法,检查此项以确保some_Mod.py模块正确打包:python-m py2exe.mf-d some_dir/other_dir/some_Mod.py
,如中所述,如果每个子目录中都有\uu init_uuuuuuuuuuuuuuuuuuuuuuuupy
文件,则所有导入语句都应正常工作。
假设这不是问题所在,下面是导入最佳实践的优秀指南:
总之,永远不要使用相对导入-始终为绝对导入(请参见上面的链接了解原因)
其次(我不完全清楚为什么),始终将py2exe setup.py脚本保存在主脚本所在的确切文件夹中。我已尝试修改py2exe的“脚本”选项,以允许我的脚本位于其他地方。。。但你的问题发生在我身上。因此,请确保它位于主脚本所在的位置
最后,您可以随时为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
一般来说,我不导入包,在它们通常存在的地方添加项目根就足够了。根据py2exe应该导入相对导入。那么,模块是否在生成的library.zip中存在?两个模块都存在。我打开了由py2exe创建的library.zip,它包含相同的目录结构。。。我已经断断续续地处理这个问题好几年了,你已经提供了一个可行的解决方案。所以非常感谢。