Python:从子包和主包中导入子包模块

rbrtk

在这里,我们讨论我的第一个stackoverflow问题。我确实在寻找答案,但是找不到明确的答案。这是情况。我有这样的结构:

myapp
    package/
         __init.py__
         main.py
         mod1.py
         mod2.py

现在,在这种情况下,我将从main.py导入mod1.py,它也需要由mod2.py导入。一切正常,我的导入看起来像这样:

main.py:

from mod1 import Class1

mod2.py:

from mod1 import Class1

但是,我需要将main.py移至主文件夹结构,如下所示:

myapp
    main.py
    package/
         __init.py__
         mod1.py
         mod2.py

现在发生的是,我当然需要更改在main.py中导入mod1的方式:

from package.mod1 import Class1

但是,同样发生的是,为了不出现“ ImportError:没有名为'mod1'的模块”,我在mod2.py中进行了相同类型的更改:

from package.mod1 import Class1

这是为什么?mod2与mod1位于同一文件夹/包中,所以为什么-在修改main.py时-我是否希望在mod2中修改导入?

布伦丹·亚伯

发生这种情况的原因是因为当您运行python脚本作为__main__脚本时python如何查找模块和软件包

当您运行时python main.py,python会将的父目录添加main.py到pythonpath中,这意味着该目录中的软件包和模块是可导入的。移动main.py时,更改了添加到pythonpath的目录。

通常,您不想依赖此机制来导入模块,因为它不允许您移动脚本,并且只有在运行该主脚本时才能导入包和模块您应该做的是确保将您package的文件安装到pythonpath中已经存在的目录中。有几种方法可以执行此操作,但是最常见的方法是创建一个setup.py脚本并在计算机上实际安装python软件包以进行python安装。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章