从不同顶层文件夹名的Django项目导入

1 投票
2 回答
1675 浏览
提问于 2025-04-16 05:01

我最近为我的Django项目设置了一个部署方案,使用的是Fabric。基本的工作流程是:

  1. 从服务器上的git获取最新的代码。
  2. 把代码复制到一个叫“releases”的文件夹,并给这个文件夹加上时间戳。
  3. 更新一个叫“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.pyurls.py 这些文件。

这样是不对的:在项目的顶层应该有 setup.pyrequirements.txt 这些文件,还有一个项目目录,里面才放 manage.py 和其他相关文件。

(如果你想让项目更兼容非Python的环境,最好把这些文件放在顶层的 src/ 目录里……)

4

简单来说,你真的不应该在任何地方死死地写上你的项目名称,特别是在一些特定的应用里,因为这样会完全影响它们的可移植性和重复使用性。

撰写回答