如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?
Posted
技术标签:
【中文标题】如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?【英文标题】:How to run code that has modules, each in a different virtualenv? 【发布时间】:2019-10-06 02:25:12 【问题描述】:短篇小说:
我有一个非常大的 python 项目
由ServiceA
、ServiceB
、ServiceC
等组成。
为了模块化,每个服务都有自己的虚拟环境。
每个服务都需要一些来自其他服务的foo()
。
ServiceA
import package_a
ServiceB
import package_b
ServiceC
import package_c
等等。
我不想为所有服务创建一个单一的环境,因为这会使维护非常麻烦。
在保持模块化的同时集成这样一个项目以协同工作的好方法是什么?
长篇大论:
我有一个非常大的项目,其中包含 25 多个相互通信的大模块。 它们都为所有依赖项使用一个非常大的单一环境。
升级一个模块中的软件包可能会(而且经常会)破坏其他模块。 Pycharm 的索引也需要更长的时间。 在新机器上安装软件包需要的时间比它应该的要长得多 最糟糕的当然是害怕升级,因为破坏一切的机会增加了。
大多数模块只需要所有已安装包的子集。
所有这些都在 python 2.7 中,我们想升级到 python 3,由于项目大小,无法一次完成。 我们必须一次迁移一个模块,同时保持系统功能,用于业务目的和测试能力目的。
我相信这需要一些模块拥有自己的解释器,同时仍然以某种方式与其他模块一起工作。
怎么做?
【问题讨论】:
你解决了吗?我想听听。 @SorousHBakhtiary 我没有。一种可能的方法是为每个服务定义一个 API,并在不同的进程或不同的服务器中独立于其他服务运行它。让他们通过该 API 进行通信。导入和函数调用不可用 AFAIK 【参考方案1】:我认为 Pycharm 中没有术语“模块”,如下面的屏幕截图所示。 我们可以做的是在项目下添加多个文件夹。 但是,python解释器只能捆绑到项目中,而不是每个文件夹。
Pycharm ScreenShot
【讨论】:
我的“模块”已经在文件夹中,都使用相同的解释器。我怎样才能让它们独立于全球环境,同时仍然协同工作?以上是关于如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据构建变体使用 gradle 不同依赖模块的依赖项进行编译?
如何使用来自不同模块的两个具有相同名称的 AngularJS 服务?