我可以在两个python环境之间通信吗?从一个环境调用函数到下一个环境?

a64a0gku  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(242)

我有一个Python应用程序,需要一个特定版本的包列表。该应用程序与numpy,scipy等更高版本的包不兼容,或者需要大量的工程才能兼容。它还利用需要特定包运行的外部应用程序。
应用程序的第二个插件需要这些软件包的更多更新版本。这意味着如果我升级,一个将工作,但另一个不工作,反之亦然。
我读了一些书,我相信我可以用Python设置虚拟环境(或者我可以使用Miniconda,Anaconda或virtulenv来设置多个环境)。
问题是,在一个环境中运行的应用程序是否可以从一组代码中调用一个函数,该代码旨在在一个单独的环境中运行,并收到回复?因此,与现在创建函数调用的方式相同我会调用存放在单独环境中的代码的函数,或者我需要用pythonapi设置第二个环境并将pythonapp作为服务运行吗(或使用Flask),以便向第二个环境发送请求和响应?
第二个选项具有挑战性,因为需要在许多客户端机器上设置,这将导致更多的故障点。
谢谢

5hcedyr0

5hcedyr01#

不,你不能直接从一个Python环境调用一个函数到另一个Python环境,因为它们是相互隔离的,你有3种解决方案来实现不同Python环境之间的通信
1.您可以使用subprocess模块在其他环境中调用Python脚本。
1.您可以在两个环境之间设置套接字通信,一个环境将充当服务器,另一个环境将充当客户端。
1.正如您所说,您可以在一个环境中设置FlaskFastAPI应用程序,并通过API公开函数。
subprocess是比较简单的一个,但如果你想要更复杂的,你可以看看其他两个,这里是一个例子:

import subprocess

def call_other_environment(script_path, *args):
    other_env_python = "/path/to/other/environment/python"
    result = subprocess.run([other_env_python, script_path, *args], capture_output=True, text=True)
    return result.stdout

output = call_other_environment("other_env_script.py", "arg1", "arg2")
print(output)

相关问题