2011-02-28 124 views
3

我正在使用多个应用程序(python模块)的django项目。大多数这些Python模块由其他人在他们自己的git存储库中维护。我用的是混帐子模块命令将它们导入到我的项目“应用程序”目录下,像这样:Django,Python模块和Git子模块

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-extensions,以便它可以导入django_extensions子文件夹。

这很烦人的打字:

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

是否有更简单的方法,我应该铺设了我的回购?更简单的过程? 只是为了好玩,我尝试了一个mysite/apps/*的PYTHONPATH,但没有奏效。

回答

0

你可以试试看看仓库中想要的部分吗?因此,如果他们在您正在检查的内容中​​包含实际代码,请不要检查额外的部分。

因此,而不是得到Django的扩展获取Django的扩展/ Django的扩展。

编辑:我相信this是你以上可以做的。另外,我相信你可以在第一个django-extensions目录下添加一个__init__.py,但是你将不得不为你的导入添加额外的django-extensions(__init__.py告诉python它是一个包)。虽然我认为这可能有效,但我会建议拍摄我的第一个例子。

+0

虽然git现在在版本1.7中支持稀疏检出,但它不会影响路径。我想我可能只需要添加一些东西到我的__init__.py中,通过mysite/apps/*扫描并将这些目录添加到python路径中。 – 2011-02-28 00:56:03

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部署应用程序。我不再使用这个。尽管结账需要“调整”并在项目中使用它们的第三方应用程序仍然很痛苦。

8

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

+1

使用git子模块检查django项目的所有组件有什么问题?对我来说更容易遵循上游,看到突破性的变化,针对特定的版本等等......对于我来说,使用git来管理我的资源,然后学习virtualenv和pip并不是什么好处。管理所有人...另外,测试人员更容易做到“混帐”; git submodule update --init --recursive'。 – 2011-03-01 02:38:09

+0

我同意,过去一直对此感到沮丧。有一个git扩展名,可以让你映射来自远程仓库(git子树)的导向器,但它的错误和难以维护。 Daniel所建议的似乎是'标准'方法,尽管由于你上面提到的原因,它似乎只是你提出的(体面的)解决方案的一大破解。我会尝试你的方法。 – 2012-08-13 13:29:56