0

在我的主目录中,我有一个名为local. 在其中,有名为__init__.py和的文件local_settings.py。我的 django 应用程序位于完全不同的目录中。当应用程序未调试模式下运行时,我希望它加载local_settings.py文件。如何实现?我阅读了以下内容:

从相对路径导入模块

从 Python 中的不同文件夹导入文件

http://docs.python.org/tutorial/modules.html

基本上,这些教程允许从另一个目录导入,但是完全不同的工作树呢?我不想继续做 .., .., .. 等。有没有办法转到主目录?

我尝试了以下代码:

import os, sys
os.chdir(os.path.join(os.getenv("HOME"), 'local'))
from local_settings import *

但是我一直在我的 apache error.log 中看到错误...

4

2 回答 2

0

为了解决您对源代码控制的担忧,您可以将源代码控制设置为忽略该文件,和/或安装一个符号链接作为部署脚本的一部分,以将操作系统上的文件链接到另一个文件。我两者都做,虽然不在 django 中。但这是一项微不足道的任务。

您的部署布局可能如下所示:

/current ( symlink to /releases/v3 )
/settings/local_settings.py
/releases/v1
/releases/v2
/releases/v3

并且任务作为部署的一部分运行:

cd /current 
ln -s /settings/local_settings.py local_settings.py

如果您使用 fab 或 capistrano 进行部署,则只需几行配置。我相信你也可以用 puppet/chef 做到这一点。

于 2012-09-03T19:02:57.913 回答
0

os.chdir只会影响当前工作目录,这与 Python 从何处导入模块无关。

您需要做的是将local目录添加到 Pythonpath。您可以通过修改从 shell 执行此操作,也可以通过修改PYTHONPATH从 Python 内部执行此操作sys.path

import sys
import os
sys.path.append(os.path.expanduser("~/local"))
import local_settings
于 2012-09-03T18:48:44.683 回答