Django、Python模块和Git子模块

4 投票
4 回答
3507 浏览
提问于 2025-04-16 12:38

我正在做一个django项目,这个项目里有多个应用(也就是一些python模块)。大部分这些python模块都是其他人维护的,放在他们自己的git仓库里。我用git-submodules命令把它们导入到我的项目中的'apps'目录,像这样:

mysite/
mysite/apps
mysite/apps/django-extensions
mysite/apps/django-celery
mysite/apps/django-comments
mysite/apps/myapp
...etc

这些子模块中,大部分(比如django-extensions)都有一个子文件夹,里面包含了实际的python模块:mysite/apps/django-extensions/django_extensions

这就意味着我不能简单地把我的python路径设置为包含mysite/apps——我必须把它设置为包含mysite/apps/django-extensions,这样才能导入django_extensions这个子文件夹。

这样每次都要输入路径真的很烦:

PYTHONPATH=mysite/apps/django-extensions:mysite/apps/django-celery... python manage.py runserver

有没有更简单的方法来布局我的仓库?或者更简单的流程?为了好玩,我试过把PYTHONPATH设置为mysite/apps/*,但那并没有奏效。

4 个回答

1

你可以把那些路径放在一个叫做 dependencies.pth 的文件里,然后只需要把这个 .pth 文件放到你的路径中就可以了。在你的 site-packages 或 dist-packages 文件夹里有一些例子。

5

在网上找不到答案后,我自己想了个办法。这方法简单明了,效果也不错:

#At the top of settings.py
import sys, os
git_sub_modules = '/path/to/dir/containing/submodules' #Relative paths ok too
for dir in os.listdir(git_sub_modules):
    path = os.path.join(git_sub_modules, dir)
    if not path in sys.path:
        sys.path.append(path)

时间在流逝

更新:现在使用虚拟环境(virtualenv)或者像dokku这样的工具来部署应用程序要简单得多。我已经不再使用这个方法了。不过,使用那些需要“调整”的第三方应用程序并把它们放进项目里,还是挺麻烦的。

9

这样做是不对的。不要把别人的第三方代码直接放到你自己的项目文件里。正确的做法是创建一个虚拟环境,然后用 pip 直接安装这些代码。

撰写回答