如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?

Posted

技术标签:

【中文标题】如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?【英文标题】:How to run code that has modules, each in a different virtualenv? 【发布时间】:2019-10-06 02:25:12 【问题描述】:

短篇小说:

我有一个非常大的 python 项目

ServiceAServiceBServiceC等组成。

为了模块化,每个服务都有自己的虚拟环境。 每个服务都需要一些来自其他服务的foo()

ServiceA import package_aServiceB import package_bServiceC import package_c 等等。

我不想为所有服务创建一个单一的环境,因为这会使维护非常麻烦。

在保持模块化的同时集成这样一个项目以协同工作的好方法是什么?


长篇大论:

我有一个非常大的项目,其中包含 25 多个相互通信的大模块。 它们都为所有依赖项使用一个非常大的单一环境。

升级一个模块中的软件包可能会(而且经常会)破坏其他模块。 Pycharm 的索引也需要更长的时间。 在新机器上安装软件包需要的时间比它应该的要长得多 最糟糕的当然是害怕升级,因为破坏一切的机会增加了。

大多数模块只需要所有已安装包的子集。

所有这些都在 python 2.7 中,我们想升级到 python 3,由于项目大小,无法一次完成。 我们必须一次迁移一个模块,同时保持系统功能,用于业务目的和测试能力目的。

我相信这需要一些模块拥有自己的解释器,同时仍然以某种方式与其他模块一起工作。


怎么做?

【问题讨论】:

你解决了吗?我想听听。 @SorousHBakhtiary 我没有。一种可能的方法是为每个服务定义一个 API,并在不同的进程或不同的服务器中独立于其他服务运行它。让他们通过该 API 进行通信。导入和函数调用不可用 AFAIK 【参考方案1】:

我认为 Pycharm 中没有术语“模块”,如下面的屏幕截图所示。 我们可以做的是在项目下添加多个文件夹。 但是,python解释器只能捆绑到项目中,而不是每个文件夹。

Pycharm ScreenShot

【讨论】:

我的“模块”已经在文件夹中,都使用相同的解释器。我怎样才能让它们独立于全球环境,同时仍然协同工作?

以上是关于如何运行具有模块的代码,每个模块都在不同的 virtualenv 中?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2/4:为每个模块加载 sass 变量

python进阶-- 02 如何使用模块

如何根据构建变体使用 gradle 不同依赖模块的依赖项进行编译?

如何使用来自不同模块的两个具有相同名称的 AngularJS 服务?

c# - 如何在运行时从模块代码中获取 PowerShell 模块版本

如何使用具有不同/自定义模块名称的 npm 安装软件包