Django项目调用外部本地包报错:No module named 'globals'
解决Django跨目录导入自定义包报错"No module named 'globals'"
先明确目录结构
假设你的项目结构大致如下:
api_yahoo_finance/ ├── yahoo/ │ ├── api_yahoo/ │ │ ├── views.py # 你当前编写代码的文件 │ │ └── __init__.py │ ├── globals/ # 你要导入的自定义包 │ │ ├── __init__.py │ │ └── 你的模块文件.py │ └── __init__.py ├── manage.py └── settings.py
如果globals和api_yahoo同属yahoo目录,问题大概率出在导入路径或Python的模块搜索范围上,试试下面几种解决方法:
方法1:使用相对导入
在views.py里直接通过相对路径导入目标包:
# views.py from ...globals import 你需要导入的模块或类
这里的三个点...表示向上跳转两级目录,从api_yahoo目录回到yahoo目录,就能定位到globals包。
方法2:将项目根目录加入Python搜索路径
如果觉得相对导入不够直观,可手动把项目根目录添加到sys.path中,让Python能识别上层目录的包。在views.py开头添加以下代码:
# views.py import sys from django.conf import settings sys.path.append(settings.BASE_DIR) # 之后直接导入即可 from yahoo.globals import 你需要导入的模块或类
利用Django自带的BASE_DIR最稳妥,它默认指向api_yahoo_finance项目根目录。
方法3:检查__init__.py文件
确认globals目录下的__init__.py存在(空白文件即可),同时核对导入语句的拼写,避免因写错globals名称导致报错。
额外提醒
不要直接写from globals import ...,Python默认只会搜索当前脚本所在目录和sys.path中的路径,无法直接找到上级目录的包。如果globals包本身就在api_yahoo_finance根目录下,那直接from globals import ...即可,因为Django启动时会自动将项目根目录加入sys.path。
内容的提问来源于stack exchange,提问作者Django
相关产品推荐
相关产品推荐

