Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django、Python模块和Git子模块_Python_Django_Git_Module_Git Submodules - Fatal编程技术网

Django、Python模块和Git子模块

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 大多数子模块(

我正在从事一个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扩展为例)都有一个子文件夹,其中包含实际的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所建议的似乎是“标准”方法,尽管出于您上面提到的原因,它似乎只是一个很大的黑客行为,就像您提出的(体面的)解决方案一样。我会尽力让你接近。