直接执行Python脚本时出现ModuleNotFoundError: No module named 'pars'
问题:Django独立脚本运行时出现
ModuleNotFoundError: No module named 'pars' 场景背景
已在Django项目的settings.py的INSTALLED_APPS中添加自定义应用'pars',项目目录结构如下:
secenumproject/ settings.py # 其他项目文件 secenumproject/pars models.py parse.py # 其他应用文件
运行包含Django独立执行配置的Python脚本时,触发如下错误:
ModuleNotFoundError: No module named 'pars'
脚本代码如下:
# below 5 lines to run scripts 'standalone' in django import django from django.conf import settings from pars import pars_defaults settings.configure(default_settings=pars_defaults, DEBUG=True) django.setup() from pars.models import tb1, tb2 technologytitle=soup.find("h1").text try: technology=CMS(nm=technologytitle) technology.save() print("saved techology: {}".format(technologytitle)) except IntegrityError as e: print("Integrity error occurring with saving: {} {}".format(technologytitle, e))
解决方法
1. 手动添加项目根目录到Python路径
pars模块位于内层secenumproject/目录下,直接运行脚本时Python解释器无法自动识别该路径,需在脚本开头添加路径配置:
import sys import os # 获取外层secenumproject/的绝对路径 PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 将项目根目录加入Python路径 sys.path.append(PROJECT_ROOT)
2. 改用项目原生settings配置
既然已在项目settings.py中注册了pars应用,直接复用项目配置更可靠,避免自定义配置遗漏路径相关逻辑。修改脚本开头的Django初始化代码:
import django import os import sys # 添加项目根目录到Python路径 PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(PROJECT_ROOT) # 指定Django使用项目的settings模块 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'secenumproject.settings') django.setup() # 后续正常导入模型 from pars.models import tb1, tb2
3. 确保脚本运行位置正确
必须在外层secenumproject/目录下执行脚本,避免相对路径错误。例如脚本放在外层目录时,运行命令:
python parse.py
若脚本在其他位置,使用绝对路径执行:
python /完整路径/secenumproject/parse.py
内容的提问来源于stack exchange,提问作者Jshee
相关产品推荐
相关产品推荐

