Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python py2exe无法从其他目录导入模块_Python_Py2exe - Fatal编程技术网

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 有人能解释

我正在将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
有人能解释一下原因吗


备注:重命名模块实际上没有问题,但我只是想知道,为什么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,它包含相同的目录结构。。。我已经断断续续地处理这个问题好几年了,你已经提供了一个可行的解决方案。所以非常感谢。