这里我们首先讨论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在同一个文件夹/ pakcage中,所以为什么 - 在修改main.py时 - 我希望在mod2中修改我的导入?
答案 0 :(得分:2)
发生这种情况的原因是因为当你运行python脚本作为__main__
脚本时,python如何查找模块和包。
运行python main.py
时,python会将main.py
的父目录添加到python路径,这意味着目录中的包和模块是可导入的。当您移动main.py时,您更改了添加到pythonpath的目录。
通常,您不希望依赖此机制导入模块,因为它不允许您移动脚本,而您的包和模块仅可导入在运行该主脚本时。您应该做的是确保将package
安装到pythonpath中已有的目录中。有几种方法可以做到这一点,但最常见的是为计算机上的python安装创建setup.py
脚本并实际install your python package。