尝试使用Python在顶级包之外进行相对导入

尝试使用Python在顶级包之外进行相对导入,python,django,Python,Django,我看到了几个与此错误相关的问题,但我认为它们是不同的情况。我的Django项目有2个应用程序和这样的目录结构,我面临一个相对导入的问题,我不理解逻辑 Python允许我从文件my_app2/signals.py导入market,但它返回ValueError:如果我从文件my_app1/signals.py导入portfolio,则尝试在顶级包之外进行相对导入。原因是什么?我怎样才能找到合适的答案 /my_project /my_project __init__.py /my_ap

我看到了几个与此错误相关的问题,但我认为它们是不同的情况。我的Django项目有2个应用程序和这样的目录结构,我面临一个相对导入的问题,我不理解逻辑

Python允许我从文件
my_app2/signals.py
导入
market
,但它返回
ValueError:如果我从文件
my_app1/signals.py
导入
portfolio
,则尝试在顶级包之外进行相对导入。原因是什么?我怎样才能找到合适的答案

/my_project
  /my_project
    __init__.py
  /my_app1
    market.py
    signals.py  #  Here I can't import portfolio.py
  /my_app2
    portfolio.py 
    signals.py  #  Here I can import market.py
my_app1/signals.py

from ..my_app2 import portfolio #  doesn't work
ValueError: attempted relative import beyond top-level package

from my_project.my_app2 import portfolio #  doesn't work
ModuleNotFoundError: No module named 'my_project.my_app2'
from ..my_app1 import market #  works
my_app2/signals.py

from ..my_app2 import portfolio #  doesn't work
ValueError: attempted relative import beyond top-level package

from my_project.my_app2 import portfolio #  doesn't work
ModuleNotFoundError: No module named 'my_project.my_app2'
from ..my_app1 import market #  works

我最终在没有使用
中的
的情况下解决了这个问题,我不清楚是什么导致了这个错误

import my_app2.portfolio as portfolio

恐怕这不适用于我的情况,
sys.path.append(“.”
sys.path.append(“…”)
不能解决这个问题。原因与python中相对导入的工作方式有关。我有一个详细的解释在我的教程在。