【问题标题】:What is the best method to call a Python 3.x program from within Python 2.x?从 Python 2.x 中调用 Python 3.x 程序的最佳方法是什么?
【发布时间】:2011-11-15 15:40:49
【问题描述】:

我正在编写一个 Django Web 应用程序。截至目前,Django does not support Python 3。出于我的 Web 应用程序的目的,在不涉及太多细节的情况下,我基本上需要使用一些仅支持 Python 3 的库。可以说,经过深入研究,没有找到 2.x 替代方案。

所以我的问题是:我应该怎么做?

我的服务器上同时安装了 Python 2 和 3,并且编写了 Python 3 代码并等待调用。我正在考虑简单地使用 subprocess 模块,从命令行有效地调用 Python 3,但问题是,这是最好的方法还是我可以在这里使用的最佳实践?使用subprocess 对我来说似乎很老套。不要误会我的意思,我对 hackish 没意见,我只是想确保没有其他我应该做的事情。

【问题讨论】:

  • 使用cherrypy 并在 Python 3 中完成所有工作怎么样?
  • xmlrpc 可能是子处理的简单替代方案
  • 您是否尝试过使用 3to2 程序查看未指定的纯 Python 3 库是否可以自动转换为 Python 2?您是否尝试过使用 Martin von Löwis 的 port of Django to Python 3 让一切都在 Python 3 中运行?
  • @Sven Marnach:是的,所以我不会为了解决这个我已经解决的小问题而学习一个全新的框架并重写我们的整个 Web 应用程序。
  • 在 90% 的情况下添加 Python 2 支持非常简单。如果可以,您可能想与图书馆作者核实。

标签: python python-3.x subprocess


【解决方案1】:

由于 Python 3 和 Python 2 解释器是完全独立的可执行文件,并且在您的系统上安装了独立的库,因此使用 subprocess 从另一个调用其中一个最佳实践。这根本不是黑客。有多种方法可以在它们之间传递数据,但两个解释器应作为单独的进程运行。

也就是说,您可能需要记住与启动解释器进程相关的启动时间。这又回到了如何在两个进程之间传递数据。如果您的 Python 2 代码将频繁调用 Python 3 例程,您可能需要将 Python 3 程序构建为守护进程。但是你仍然会使用subprocess 来启动它。

【讨论】:

  • 太棒了。非常感谢。至于它是否需要最终成为一个过程......这需要一些思考。它只需要在用户注册时调用一次,因此短期内可能不需要,但理论上,如果我的 webapp 变得有用,它可能是一件方便的事情。即使互联网连接速度很慢,整个过程也不会超过 5 秒。
【解决方案2】:

将 3.x 程序作为单独的服务运行,然后使用某种 RPC 机制进行连接?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多