我可以导入其中包含我编写导入语句的python文件的模块吗?

时间:2019-01-31 04:02:10

标签: python python-3.x import

TopFolder -
          -FirstFolder
          -SecondFolder
          -main.py

在main.py内部:

from TopFolder import *

我得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'TopFolder'

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试将FirstFolderSecondFolder模块导入main。

现在,尝试执行from TopFolder import *将导致循环导入,因为main将自身进行导入(main.py是*的一部分),这将再次执行import *,...等等。此外,建议不要进行import *(请参阅Why is “import *” bad? )。

更好的解决方案是将FirstFolder和SecondFolder定义为packages
然后从main中的那些包中导入特定的模块。

TopFolder
 |- FirstFolder
    |- __init__.py
    |- foo1.py
 |- SecondFolder
    |- __init__.py
    |- foo2.py
 |- main.py

在foo1.py中:

def bar1():
    return "bar 1"

在foo2.py中:

def bar2():
    return "bar 2"

在main.py中:

# from TopFolder import *  # Don't do this
from FirstFolder import foo1
from SecondFolder import foo2

print(foo1.bar1())
print(foo2.bar2())

结果:

$ python3 main.py
bar 1
bar 2