为什么 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 路径上。该目录中的 运行 fab
或 python
或 ./manage.py
将在该命令执行期间将其添加到 Python 路径。
也有可能 conf.settings
正在提高它自己的 ImportError
。
我有一个最小的 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 路径上。该目录中的 运行 fab
或 python
或 ./manage.py
将在该命令执行期间将其添加到 Python 路径。
也有可能 conf.settings
正在提高它自己的 ImportError
。