为什么 Fabric fabfile 看不到 Django 设置?

Why can't Fabric fabfile see Django settings?

我有一个最小的 Django 项目,其中包含一个简单地尝试显示 Django 设置的 fabfile:

# fabfile.py
from fabric.api import *
from fabric.contrib import django

django.settings_module('conf.settings')
from django.conf import settings

def set():
    print settings.DEBUG

当我 运行 在我的本地主机上激活我的虚拟环境 'venv' 时,转到项目目录 '/www/django/testfab/' 和 运行 命令 'fab set',我得到这个错误:

Traceback (most recent call last):
  File "/Users/smith/venv/django18/lib/python2.7/site-packages/fabric/main.py", line 743, in main
    *args, **kwargs
  File "/Users/smith/venv/django18/lib/python2.7/site-packages/fabric/tasks.py", line 427, in execute
    results['<local-only>'] = task.run(*args, **new_kwargs)
  File "/Users/smith/venv/django18/lib/python2.7/site-packages/fabric/tasks.py", line 174, in run
    return self.wrapped(*args, **kwargs)
  File "/www/django/testfab/fabfile.py", line 8, in set
    print settings.DEBUG
  File "/Users/smith/venv/django18/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/Users/smith/venv/django18/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/Users/smith/venv/django18/lib/python2.7/site-packages/django/conf/__init__.py", line 92, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named conf.settings

我的 settings.py 文件在我的 /www/django/testfab/conf 目录中:

.
├── conf
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── fabfile.py
├── fabfile.pyc
└── manage.py

我的 DJANGO_SETTINGS_MODULE 环境变量设置为 'conf.settings'。

为什么 Fabric 看不到我的 settings.py 文件?我正在按照 Fabric 文档中显示的 Django Integration 说明进行操作。

谢谢!

解决方案

正如 Sean Hayes 在下面指出的那样,这是一种织物 issue。解决方法如下:

django.settings_module('conf.settings')
from django.conf import settings
_ = settings.INSTALLED_APPS

您 运行 fab 来自哪个目录? conf 不会被识别为 Python 模块,除非 /www/django/testfab/ 在 Python 路径上。该目录中的 运行 fabpython./manage.py 将在该命令执行期间将其添加到 Python 路径。

也有可能 conf.settings 正在提高它自己的 ImportError