You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django集成CircleCI 2.0遇ImportError:'app.settings'非包问题求助

解决Django集成CircleCI 2.0时的ImportError问题

你执行python manage.py makemigrations --settings app.settings.ci时触发了如下错误:

ImportError: No module named 'analytics_api.settings.ci'; 'analytics_api.settings' is not a package

完整回溯信息:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/xxx/anaconda/envs/rf/lib/python3.5/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/Users/xxx/anaconda/envs/rf/lib/python3.5/site-packages/django/core/management/__init__.py", line 317, in execute
    settings.INSTALLED_APPS
  File "/Users/xxx/anaconda/envs/rf/lib/python3.5/site-packages/django/conf/__init__.py", line 56, in __getattr__
    self._setup(name)
  File "/Users/xxx/anaconda/envs/rf/lib/python3.5/site-packages/django/conf/__init__.py", line 43, in _setup
    self._wrapped = Settings(settings_module)
  File "/Users/xxx/anaconda/envs/rf/lib/python3.5/site-packages/django/conf/__init__.py", line 106, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/Users/xxx/anaconda/envs/rf/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ImportError: No module named 'analytics_api.settings.ci'; 'analytics_api.settings' is not a package

这个错误的核心原因很明确:你的analytics_api.settings(也就是你说的app.settings)不是一个Python包,Django没法从中导入ci模块。下面是具体的修复步骤:

1. 重构settings为Python包

你需要把原来单个的settings.py文件改成一个包含多个配置文件的文件夹(包)。正确的项目结构应该是这样的:

your_project_root/
├── analytics_api/          # 你的app根目录(对应你说的app)
│   ├── settings/
│   │   ├── __init__.py    # 必须存在,空文件即可,标记这是Python包
│   │   ├── base.py        # 存放通用配置(原来settings.py的内容)
│   │   └── ci.py          # CircleCI专属配置,继承base.py
│   ├── __init__.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

2. 迁移配置内容

  • 把原来settings.py里的所有内容复制到settings/base.py中
  • 创建settings/ci.py,写入CircleCI环境的专属配置,建议继承base的配置来避免重复代码:
from .base import *

# 覆盖CI环境需要的配置项
DEBUG = False
ALLOWED_HOSTS = ['*']

# CI环境的数据库配置(比如CircleCI自带的PostgreSQL)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'circle_test',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

3. 调整manage.py的默认配置(可选)

如果不想本地开发每次都指定--settings参数,可以修改manage.py里的默认配置:
找到这一行:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'analytics_api.settings')

改成:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'analytics_api.settings.base')

这样本地默认使用base配置,CI环境执行命令时依旧指定analytics_api.settings.ci即可。

4. 本地验证修复

先在本地运行命令测试是否正常:

python manage.py makemigrations --settings analytics_api.settings.ci

如果本地能成功执行,再推送到CircleCI上测试即可。

另外,你提供的INSTALLED_APPS配置是正常的,和这个错误没有关系,不需要修改。

内容的提问来源于stack exchange,提问作者user9287271

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:42:59