【发布时间】:2021-02-02 05:45:24
【问题描述】:
我的目录结构如下
├── main.py
└── mypkg
├── barlib.py
├── foolib.py
├── __init__.py
└── pmain.py
我有两个要运行的文件。 main.py 在父目录中,pmain.py 在我的包目录中。我在foolib.py 中有一个简单的函数foo()。在barlib.py,我从foolib导入foo
from foolib import foo
def bar():
foo()
在pmain.py 中,我导入bar 并使用它。 到目前为止一切顺利。没有错误。
import barlib
barlib.bar()
现在在父目录的main.py,我想使用bar from barlib
from mypkg.barlib import bar
bar()
在 python 3(用 3.6 和 3.8 测试)这表示 barlib 找不到 foolib(但 python 2 没有给我错误)
Traceback (most recent call last):
File "main.py", line 1, in <module>
from mypkg.barlib import bar
File "/xxxxx/mypkg/barlib.py", line 1, in <module>
from foolib import foo
ModuleNotFoundError: No module named 'foolib'
我可以修改barlib中的import语句,用模块名导入,这样错误就消失了
from mypkg.foolib import foo
但现在我无法运行位于包目录中的另一个文件pmain(显然)。它给了我
Traceback (most recent call last):
File "mypkg/pmain.py", line 1, in <module>
from barlib import bar
File "/xxxxx/mypkg/barlib.py", line 1, in <module>
from mypkg.foolib import foo
ModuleNotFoundError: No module named 'mypkg'
有人可以解释一下这里发生了什么吗?我找不到关于 python3 的这种行为的另一个类似问题
如何在包目录中导入,以便在父目录和包目录中都可以使用bar?
编辑:Here's a script 如果有人想重现问题,则重新创建文件夹结构
【问题讨论】:
-
你的
__init__.py里面有什么? -
没什么。它只是为了让
mypkg成为一个包 -
成功了吗?让我知道,否则我将删除答案。
标签: python python-3.x import package python-import