从不同顶层文件夹名的Django项目导入
我最近为我的Django项目设置了一个部署方案,使用的是Fabric。基本的工作流程是:
- 从服务器上的git获取最新的代码。
- 把代码复制到一个叫“releases”的文件夹,并给这个文件夹加上时间戳。
- 更新一个叫“current”的符号链接,让它指向最新的版本。
这个流程运行得很好,唯一的问题是,因为顶层目录是一个叫“current”的符号链接,它指向一个像“project_name_2010_10_04”这样的文件夹,所以所有以下的导入语句都会失败:
from project_name.app import models
...
INSTALLED_APPS = (
'project_name.app'
)
...
urlpatterns = patterns('',
(r'^$', 'project_name.app.views.index'),
)
我找到的解决办法是把项目中所有关于“project_name”的引用都删掉,这样应用似乎可以正常部署和运行(目前是这样)。但我觉得这不是解决问题的正确方法……主要是因为在新创建的Django项目中,'urls.py'、'settings.py'这些文件默认都引用了项目名称,还有各种Django文档也提到要用到项目名称。
所以总结一下我的问题,有没有办法指定一个包名,与实际的目录名不同?
2 个回答
0
看起来你的项目根目录里直接放着 manage.py
、urls.py
这些文件。
这样是不对的:在项目的顶层应该有 setup.py
、requirements.txt
这些文件,还有一个项目目录,里面才放 manage.py
和其他相关文件。
(如果你想让项目更兼容非Python的环境,最好把这些文件放在顶层的 src/
目录里……)
4
简单来说,你真的不应该在任何地方死死地写上你的项目名称,特别是在一些特定的应用里,因为这样会完全影响它们的可移植性和重复使用性。