已经有 10 多篇关于此问题的帖子了,没有一个答案对我有用,而且我仍然没有看到有人从同级目录导入某些内容的示例。
src
__init__.py
test.py
package1
__init__.py
module1.py
package2
__init__.py
module2.py
Run Code Online (Sandbox Code Playgroud)
(_ init _.py 在大于 3.3 的 python 版本上不是必需的,但我仍然保留它们,因为它们没有区别)
在 test.py 我有
import package1.module2
Run Code Online (Sandbox Code Playgroud)
它工作正常,但问题是当我想将某些内容从 package2 导入到 package1 时,反之亦然。我在 module2.py 中尝试了不同的导入方法,但收到了以下不同的错误消息:
import src.package1.module1.py
Run Code Online (Sandbox Code Playgroud)
出现错误:
ModuleNotFoundError: No module named 'src'
Run Code Online (Sandbox Code Playgroud)
和
from .. import package1
Run Code Online (Sandbox Code Playgroud)
出现错误:
ImportError: attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)
这里的最佳答案是:如何从同级目录导入 Python 脚本?还给我确切的错误消息,如我上面所示。答案在这里:如何从同级文件夹导入 Python 模块?没有任何改变。我是否遗漏了某些内容,或者是否无法在不同文件夹/包之间导入内容?我需要“sys.path hack”吗?
我尝试了几乎所有类似问题的解决方案,但没有一个对我有用!然而,在我把头撞到墙上后,我发现这个解决方案只需删除一个点就可以工作:
import sys
sys.path.append('..')
Run Code Online (Sandbox Code Playgroud)
只需在append方法中从字符串中删除一个点即可,即:
sys.path.append('.')
Run Code Online (Sandbox Code Playgroud)
或者你可以使用:
sys.path.insert(0, '.')
Run Code Online (Sandbox Code Playgroud)
然后您可以从同级文件夹导入任何模块。我使用 python 3.9.13 尝试过,效果很好。