Django、Python模块和Git子模块
我正在从事一个django项目,该项目使用多个应用程序(python模块)。大多数python模块都由其他人在自己的git存储库中维护。我使用git submodules命令将它们导入到“apps”目录下的项目中,如下所示:Django、Python模块和Git子模块,python,django,git,module,git-submodules,Python,Django,Git,Module,Git Submodules,我正在从事一个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 大多数子模块(
mysite/
mysite/apps
mysite/apps/django-extensions
mysite/apps/django-celery
mysite/apps/django-comments
mysite/apps/myapp
...etc
大多数子模块(以django扩展为例)都有一个子文件夹,其中包含实际的python模块:mysite/apps/django extensions/django_extensions
这意味着我不能简单地将python路径设置为包含mysite/apps——我必须将其设置为包含mysite/apps/django扩展,以便它可以导入django_扩展子文件夹
打字很烦人:
PYTHONPATH=mysite/apps/django-extensions:mysite/apps/django-celery... python manage.py runserver
有没有一种更简单的方法可以让我制定回购协议?一个更简单的过程?
只是为了好玩,我尝试了mysite/apps/*的PYTHONPATH,但没有成功。你能试着检查一下存储库中想要的部分吗?因此,如果他们在您要签出的内容中包含实际代码,则不要签出额外的部分 因此,不要获取django扩展,而是获取django扩展/django扩展 编辑:我相信这就是你在上面所能做的
另外,我相信您可以在第一个django extensions目录中添加一个_init__uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。虽然我认为这可能会起作用,但我建议我的第一个例子是射击。您可以将这些路径塞入
dependencies.pth
文件中,并且在路径中只包含.pth
。您的站点包/dist包中有一些示例。在互联网上出现空白后,我一起黑了这个解决方案。这是直截了当的,而且效果很好:
#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的东西部署应用程序要容易得多。我不再用这个了。尽管签出需要“调整”的第三方应用程序并在项目中使用它们仍然是一件痛苦的事情。这是错误的做法。不要在您自己的项目文件中安装其他人的第三方代码。相反,创建一个virtualenv,并直接使用
pip
安装代码。虽然git现在在1.7版中支持稀疏签出,但它不会影响路径。我想我可能只需要在init.py中添加一些东西,扫描mysite/apps/*并将目录添加到python路径中。使用git子模块检查django项目的所有组件有什么错?对我来说,更容易跟随上游,看到突破性的变化,“锁定”到特定的版本,等等。。。使用git来管理我的源代码,然后学习virtualenv和pip来管理其他人,对我来说似乎没有什么好处。。。另外,对于测试人员来说,对“git pull”进行测试要容易得多;git子模块更新--init--recursive“。我同意,并且在过去对此感到沮丧。有一个git扩展,允许您从远程存储库(git子树)映射控制器,但它有缺陷且难以维护。Daniel所建议的似乎是“标准”方法,尽管出于您上面提到的原因,它似乎只是一个很大的黑客行为,就像您提出的(体面的)解决方案一样。我会尽力让你接近。