python - 在 Python 3.2 中调用 Python 2.7 模块

标签 python python-2.7 python-3.x subprocess arcpy

我有一个用 Python 3.2 开发的 GUI 程序,用于提取各种地理空间数据产品。我需要调用我在 Python 2.7 中开发的模块。

我正在寻找一种能够在 Python 3.2 程序中使用 Python 2.7 解释器调用 Python 2.7 代码的方法。我无法将 2.7 移植到 Python 3.2,因为它使用与 ESRI ArcMap 一起安装的 Python 版本,并且依赖于 arcpy 模块,该模块不适用于 Python 3。我现在唯一的想法是使用子进程将模块作为批处理调用然而这有点困惑,我更希望这两个程序有一些关系。

提前谢谢你。

最佳答案

您可以生成 python 2.7 进程作为服务器处理来自运行在 3.2 上的 GUI 的 RPC 请求。这将通过网络、本地管道、共享内存、系统的消息总线或许多其他方式工作。您只需将图书馆的 API 转换为某种序列化消息。

假设你的图书馆有一个功能:( super 简化的例子)

def add(a, b):
    return a+b

你会把它包装在某个服务器中,比方说 flask app , 这样做:

@app.route("/add", methods=["POST"])
def handle_add():
    data = request.get_json()
    ret = your_lib.add(data['a'], data['b'])
    return jsonify(ret)

在客户端,使用类似于 requests 的方式发送和解压值

您甚至可以通过使用与库本身同名的方法实现一个翻译器模块并执行 import your_http_wrapper as your_library_name 使其相当透明。

现在的诀窍是确保您的所有参数都可以序列化,并且您可以在每次调用时在合理的时间内实际发送所有参数/返回值。此外,您失去了更改传递给包装器的变量内容的能力,因为服务器将只修改本地副本(除非您也实现对所有这些修改的序列化)

关于python - 在 Python 3.2 中调用 Python 2.7 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37318965/

相关文章:

python - Plotly python 直方图将自定义颜色添加到不同的值

python - 有没有办法同步调用方法 'toHtml' ,它是 QWebEnginePage 的对象?

python - 当为另一列指定一个条件时如何填充前向值?

python - python中如何继承ElementTree.Element类?

python - python中的多项式回归模型

python-2.7 - 如何更改 Flask Admin 上的按钮逻辑?

linux - Python Lib 在不使用 ssh 的情况下从 linux Box 执行远程 Windows 命令

python - object.__eq__ 如何访问调用它的方法的范围?

python - 使光标无法在 Sprite pygame中移动

python - 在 Python 中使用类根据用户输入打印出实例属性