繁体   English   中英

Django,Python模块和Git子模块

[英]Django, Python Modules, and 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

大多数这些子模块(例如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

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

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

在互联网上空白之后,我一起攻击了这个解决方案。 它很直接,效果很好:

#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的东西来部署应用程序要容易得多。 我不再使用它了。 虽然查看需要“调整”并在项目中使用它们的第三方应用程序仍然很痛苦。

您可以将这些路径放在dependencies.pth文件中,并且只在路径中包含.pth 您的site-packages / dist-packages中有一些示例。

您可以尝试仅查看存储库中需要的部分吗? 因此,如果他们在您要检查的内容中​​有实际代码,请不要检查额外部分。

因此,不要获取django-extensions获取django-extensions / django-extensions。

编辑:我相信是你上面可以做的。

另外,我相信你可以在第一个django-extensions目录中添加一个__init__.py,但是你还需要为你的导入添加额外的django-extensions(__ init__.py告诉python它是一袋)。 虽然我认为这可行,但我建议拍摄我的第一个例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM