运行 Cygwin 中的 Django 总是找不到 SECRET_KEY

Running Django in Cygwin can't always find SECRET_KEY

我正在使用 Windows 版本的 Python 3.4.3(不能使用 Cygwin 的 Python 因为我需要 pywin32),Cygwin 2.0.4(0.287/5 /3), 和 Django 1.7.8 (由于依赖原因不能使用 1.8.x).

我的问题是大约一半的时间我在 Cygwin shell 中做任何与 Django 相关的事情,我得到错误 -

Traceback (most recent call last):
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 182, in __call__
    self._pre_setup()
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 754, in _pre_setup
    self._fixture_setup()
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 887, in _fixture_setup
    if not connections_support_transactions():
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 874, in connections_support_transactions
    for conn in connections.all())
  File "C:\dev\web\.env\lib\site-packages\django\db\utils.py", line 257, in all
    return [self[alias] for alias in self]
  File "C:\dev\web\.env\lib\site-packages\django\db\utils.py", line 254, in __iter__
    return iter(self.databases)
  File "C:\dev\web\.env\lib\site-packages\django\utils\functional.py", line 55, in __get__
    res = instance.__dict__[self.func.__name__] = self.func(instance)
  File "C:\dev\web\.env\lib\site-packages\django\db\utils.py", line 148, in databases
    self._databases = settings.DATABASES
  File "C:\dev\web\.env\lib\site-packages\django\conf\__init__.py", line 46, in __getattr__
    self._setup(name)
  File "C:\dev\web\.env\lib\site-packages\django\conf\__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\dev\web\.env\lib\site-packages\django\conf\__init__.py", line 115, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

在这种情况下,我正在尝试 运行 使用 nose 进行简单的单元测试。奇怪的是它在大约 50% 的时间内断断续续地发生。

我可以通过这个小测试确认我的 PYTHONPATH 设置正确。

printf "3c";printf "+++ python sys.path\n\n";python -c "import sys;print(sys.path)";printf "\n+++ building...\n\n"; nosetests app -v

哪个输出。

+++ python sys.path                                                                                                                                                          

['', 'C:\dev\web', 'C:\WINDOWS\system32\python34.zip', 'C:\dev\web\.env\DLLs', 'C:\dev\web\.env\lib', 'C:\dev\web\.env\Scripts', 'C:\Python34\Lib', 'C:\Python34\DLLs', 'C:\dev\web\.env', 'C:\dev\web\.env\lib\site-packages', 'C:\dev\web\.env\lib\site-packages\win32', 'C:\dev\web\.env\lib\site-packages\win32\lib', 'C:\dev\web\.env\lib\site-packages\Pythonwin']                                                                           

+++ building...                                                                                                                                                              

ERROR                                                                                                                                                                        

======================================================================                                                                                                       
ERROR: test_foo (asd.tests.FooTests)                                                                                                                                         
----------------------------------------------------------------------                                                                                                       
Traceback (most recent call last):                                                                                                                                           
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 182, in __call__                                                                               
    self._pre_setup()                                                                                                                                                        
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 754, in _pre_setup                                                                             
    self._fixture_setup()                                                                                                                                                    
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 887, in _fixture_setup                                                                         
    if not connections_support_transactions():                                                                                                                               
  File "C:\dev\web\.env\lib\site-packages\django\test\testcases.py", line 874, in connections_support_transactions                                                       
    for conn in connections.all())                                                                                                                                           
  File "C:\dev\web\.env\lib\site-packages\django\db\utils.py", line 257, in all                                                                                          
    return [self[alias] for alias in self]                                                                                                                                   
  File "C:\dev\web\.env\lib\site-packages\django\db\utils.py", line 254, in __iter__                                                                                     
    return iter(self.databases)                                                                                                                                              
  File "C:\dev\web\.env\lib\site-packages\django\utils\functional.py", line 55, in __get__                                                                               
    res = instance.__dict__[self.func.__name__] = self.func(instance)                                                                                                        
  File "C:\dev\web\.env\lib\site-packages\django\db\utils.py", line 148, in databases                                                                                    
    self._databases = settings.DATABASES                                                                                                                                     
  File "C:\dev\web\.env\lib\site-packages\django\conf\__init__.py", line 46, in __getattr__                                                                              
    self._setup(name)                                                                                                                                                        
  File "C:\dev\web\.env\lib\site-packages\django\conf\__init__.py", line 42, in _setup                                                                                   
    self._wrapped = Settings(settings_module)                                                                                                                                
  File "C:\dev\web\.env\lib\site-packages\django\conf\__init__.py", line 115, in __init__                                                                                
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")                                                                                                  
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.                                                                                       

----------------------------------------------------------------------                                                                                                       
Ran 0 tests in 0.327s                                                                                                                                                        

FAILED (errors=1)  

什么会导致这种差异?

这才是真正的原因。

我有环境变量 DJANGO_SETTINGS_MODULEdjango_settings_module - 名称相同,大小写不同。 DJANGO_SETTINGS_MODULE 被适当地设置为 config.settings.local,而 django_settings_module 被设置为 asd

我不知道 1) 这两个都已定义,并且 2) shell(Cygwin shell,无论如何)随机 returns 一个值,尽管存在差异。