尝试使用Python在顶级包之外进行相对导入
我看到了几个与此错误相关的问题,但我认为它们是不同的情况。我的Django项目有2个应用程序和这样的目录结构,我面临一个相对导入的问题,我不理解逻辑 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
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中相对导入的工作方式有关。我有一个详细的解释在我的教程在。