Django项目中如何从外部目录导入函数与变量?解决相对导入报错
问题描述
我想从Django应用当前目录的5级上层目录导入函数和常量,但要导入的包在Django应用之外,Django无法识别它。
项目结构如下:
├── lawcrawler │ ├── get_all_amended_laws_urls.py # 要从这个文件导入函数 │ ├── lawcrawler │ │ └── spiders │ │ └── settings.py # 要从这个文件导入变量 │ ├── project │ ├── apps │ │ ├── laws │ │ ├── management │ │ ├── commands │ │ ├── add_list_of_amended_laws.py # 需要导入到这个文件 │ ├── manage.py
按照Python相对导入规则,我尝试了以下写法:
from .......lawcrawler.lawcrawler.spiders.settings import SPARQL_ENDPOINT, AMENDED_URL_FILE_PATH, get_law_amendment_query
以及:
from .....lawcrawler import get_all_amended_urls
但报错:
ImportError: attempted relative import with no known parent package
解决方案
方法1:手动添加路径到Python搜索路径
在add_list_of_amended_laws.py开头添加代码,把lawcrawler所在的根目录加入Python的模块搜索路径:
import sys import os # 获取当前文件绝对路径,回溯5级到包含lawcrawler和project的根目录 current_file_path = os.path.abspath(__file__) root_dir = os.path.abspath(os.path.join(current_file_path, '../../../../..')) # 将根目录加入sys.path if root_dir not in sys.path: sys.path.append(root_dir) # 直接导入目标模块 from lawcrawler.get_all_amended_laws_urls import get_all_amended_urls from lawcrawler.lawcrawler.spiders.settings import SPARQL_ENDPOINT, AMENDED_URL_FILE_PATH, get_law_amendment_query
方法2:将外部包安装为可编辑模块
如果lawcrawler可以打包,用pip安装为可编辑模式,让Python全局识别这个包:
- 在
lawcrawler目录下创建setup.py文件,示例内容:
from setuptools import setup, find_packages setup( name="lawcrawler", version="0.1", packages=find_packages(), )
- 执行安装命令:
pip install -e /path/to/lawcrawler
之后在Django命令文件里直接导入即可:
from lawcrawler.get_all_amended_laws_urls import get_all_amended_urls from lawcrawler.lawcrawler.spiders.settings import SPARQL_ENDPOINT, AMENDED_URL_FILE_PATH, get_law_amendment_query
方法3:修改Django配置全局添加路径
在Django项目的settings.py中添加路径配置,让整个项目都能识别外部包:
import sys import os # 获取包含lawcrawler和project的根目录 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) root_dir = os.path.abspath(os.path.join(BASE_DIR, '..')) if root_dir not in sys.path: sys.path.append(root_dir)
配置完成后,在add_list_of_amended_laws.py里直接导入目标模块即可。
内容的提问来源于stack exchange,提问作者Mahdi Jafari
相关产品推荐
相关产品推荐

