Python Django跨并行文件夹导入报错,PYTHONPATH配置无法解决如何处理
问题原因
你遇到的两个报错对应两个不同的错误逻辑:
attempted relative import beyond top-level package:你用..的相对导入时,主urls.py所在的目录已经是Python可识别的顶层包,向上回溯的层级超出了包的范围,Django项目的urls导入不推荐用相对导入。no module name 'src':src目录没有被加入Python的模块搜索路径,Python无法识别src为可导入的包。同时你写的导入语句里home view中间漏了下划线,正确写法是home_view。
可行解决方案
方案1:使用Django推荐的绝对导入(最稳妥)
- 首先确认你的
Pages应用已经注册到Kianwoodco/settings.py的INSTALLED_APPS列表中,根据你的目录结构写'Pages'或者'src.Pages'。 - 如果你是用标准Django启动方式(执行
python manage.py runserver启动项目),Django会自动把manage.py所在的项目根目录加入模块搜索路径:- 如果
Pages应用和manage.py在同一个目录下,直接在主urls.py中写导入语句即可:from Pages.views import home_view - 如果
Pages应用放在src目录下,且src和manage.py同层级,先修改项目根目录下的manage.py,在def main():之前加入以下代码,把src目录永久加入搜索路径:
之后同样用import sys from pathlib import Path sys.path.append(str(Path(__file__).parent / 'src'))from Pages.views import home_view导入即可。
- 如果
方案2:排查路径配置遗留问题
- 不需要额外给目录加
__init__.py,Python 3.3+已经支持隐式命名空间包,空的__init__.py不会解决路径搜索问题。 - 不要用临时的
sys.path.append配置,该配置仅在当前执行的Shell上下文生效,重启服务就会失效,统一写到manage.py中才能全局生效。
内容的提问来源于stack exchange,提问作者user16732580
相关产品推荐
相关产品推荐

