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

时间:2016-10-15 21:06:00

标签: python import

这里我们首先讨论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在同一个文件夹/ p​​akcage中,所以为什么 - 在修改main.py时 - 我希望在mod2中修改我的导入?

1 个答案:

答案 0 :(得分:2)

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

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

通常,您不希望依赖此机制导入模块,因为它不允许您移动脚本,而您的包和模块可导入在运行该主脚本时。您应该做的是确保将package安装到pythonpath中已有的目录中。有几种方法可以做到这一点,但最常见的是为计算机上的python安装创建setup.py脚本并实际install your python package