我正在开发一个使用多个应用程序(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,但这不起作用。
答案 0 :(得分:8)
这是错误的做法。不要在您自己的项目文件中安装其他人的第三方代码。相反,创建virtualenv,并使用pip
直接安装代码。
答案 1 :(得分: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的东西来部署应用程序要容易得多。我不再使用它了。虽然查看需要“调整”并在项目中使用它们的第三方应用程序仍然很痛苦。
答案 2 :(得分:1)
您可以将这些路径放在dependencies.pth
文件中,并且只在路径中包含.pth
。您的site-packages / dist-packages中有一些示例。
答案 3 :(得分:0)
您可以尝试仅查看存储库中需要的部分吗?因此,如果他们在您要检查的内容中有实际代码,请不要查看额外部分。
所以不要让django-extensions获得django-extensions / django-extensions。
修改:我相信this就是您可以在上面做的。
另外,我相信你可以在第一个django-extensions目录中添加__init__.py,但是你还需要为你的导入添加一个额外的django-extensions(__ init__.py告诉你python它是一个包)。虽然我认为这可行,但我建议拍摄我的第一个例子。