Django,Python模块和Git子模块

Aar*_*uyn 3 python git django module git-submodules

我正在研究一个使用多个应用程序(python模块)的django项目.大多数python模块都由其他人在自己的git存储库中维护.我使用git-submodules命令将它们导入到'apps'目录下的项目中,如下所示:

mysite/
mysite/apps
mysite/apps/django-extensions
mysite/apps/django-celery
mysite/apps/django-comments
mysite/apps/myapp
...etc
Run Code Online (Sandbox Code Playgroud)

大多数子模块(例如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
Run Code Online (Sandbox Code Playgroud)

是否有更简单的方法来布置我的回购?一个简单的过程?只是为了好玩,我尝试了一个mysite/apps/*的PYTHONPATH,但这不起作用.

Dan*_*man 8

这是错误的做法.不要在您自己的项目文件中安装其他人的第三方代码.相反,创建一个virtualenv,并直接使用安装代码pip.

  • 使用git子模块检查django项目的所有组件有什么问题?我更容易跟随上游,看到突破性变化,"固定"到特定版本等等......使用git来管理我的源代码然后学习virtualenv和pip似乎没有任何优势.管理每个人......除此之外,测试人员更容易做到'git pull; git submodule update --init --recursive'. (2认同)

Aar*_*uyn 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)
Run Code Online (Sandbox Code Playgroud)

时间流逝

更新:使用virtualenv和/或类似dokku的东西来部署应用程序要容易得多.我不再使用它了.虽然查看需要"调整"并在项目中使用它们的第三方应用程序仍然很痛苦.