在Python微服务环境中处理依赖项

在Python微服务环境中处理依赖项,python,dependencies,microservices,Python,Dependencies,Microservices,背景:我想制作大量用Python编写的微服务(Django、Flask…现在不重要)供内部网使用。假设将有一个身份验证服务,一个通知服务(电子邮件和/或互联网通讯器集成)和某种数据资源服务。 因此,用户通过auth(例如get的JWT)然后点击数据服务来更改某些内容。该更改将触发对通知服务的调用以发送通知。 问题从如何处理开始,我是否应该考虑做一个客户为我服务? 我现在想到的是制作Python包,或者简单地使用git子模块来处理,就像这样: 拥有和端点data.service.local/api

背景:我想制作大量用Python编写的微服务(Django、Flask…现在不重要)供内部网使用。假设将有一个身份验证服务,一个通知服务(电子邮件和/或互联网通讯器集成)和某种数据资源服务。 因此,用户通过auth(例如get的JWT)然后点击数据服务来更改某些内容。该更改将触发对通知服务的调用以发送通知。
问题从如何处理开始,我是否应该考虑做一个客户为我服务? 我现在想到的是制作Python包,或者简单地使用git子模块来处理,就像这样:
拥有和端点
data.service.local/api/v1/food
我想(我想)做一个“提供者”,让我能够以一种简单的方式使用该端点:

class DataServiceProvider(object):

    BASE_URL = settings.DATA_SERVICE_URL

    def create_food(self, name):
        return requests.post(BASE_URL + 'food', {'name': name})
我应该麻烦吗?我的目标是让我的其他几十项服务(特别是通知服务)都能达到这个目标,所以我想我应该这样做。但在哪里存储这些提供商呢?在另一个名为
{service_name}-client
的存储库外部,并在需要使用该包的任何其他服务中使用该包


谢谢你的建议。谢谢。

好的,经过一些尝试和失败之后,我决定使用git子模块和python包。目录树如下所示:

main (repo)
├── auth (repo)
│   ├── auth-cleint (repo)
│   │   └── setup.py
│   └── requirements (contains an editable entry to ./auth-client)
├── notify (repo)
│   ├── notify-client (repo)
│   │   └── setup.py
│   └── requirements (-e ./notify-client and git+auth-client)
├── docker-compose.yml
└── data (repo)
    └── requirements (git+notify-client and git+auth-client)
auth、notify和data是独立的git存储库,作为主repo下的子模块链接。这同样适用于服务Django项目中的客户机。我在他们的服务中以可编辑模式安装客户端,只是为了使我的开发变得简单。一旦我进入staging/prod,我将使用git+链接

如果有人有兴趣深入研究,这在这里(不是商业项目-用于学习)暂时有效

此时的一个提示是,当使用
pip
时,我必须使用一个不推荐使用的
--process dependency links
标志,因为我的客户端包依赖于其他一些私有包<代码>pip维护人员将该标志设置为已弃用,但它将一直保留,直到他们找到解决这些“深度依赖”的方法