【问题标题】:How to call 2to3 before run py2app如何在运行 py2app 之前调用 2to3
【发布时间】:2013-06-18 06:38:41
【问题描述】:

我有一个使用 py2app 的 setup.py,我想在构建应用程序之前运行 2to3 将 python 脚本转换为 Python 3 兼容。我使用了选项setup(use_2to3=True),但它没有调用2to3。所以现在我使用Makefile 来解决这个问题。任何pythonic解决方案? setup.py 如下。请帮忙。

import sys
from setuptools import setup
from plistlib import Plist
plist = Plist.fromFile('Info.plist')
OPTIONS = {
    'iconfile': 'python.icns',
    'plist': plist
}
if sys.version_info.major < 3:
    app = "PyInterpreter.py"
else:
    app = "build/PyInterpreter.py"

setup(
    name="PyInterpreter",
    app=[app],
    data_files=["English.lproj"],
    options={'py2app': OPTIONS},
    setup_requires=["py2app"],
    use_2to3=True,
)

谢谢。

【问题讨论】:

    标签: python-3.x py2app python-2to3


    【解决方案1】:

    py2app 不支持 use_2to3,除非有人贡献补丁(我是 py2app 的维护者),否则可能永远不会支持。

    使用 2to3 最干净的解决方案是自己调用它,例如在子类 py2app.build_app.py2app 的自定义 distutils 命令中(实现调用 2to3 的 run 方法,可能调整构建环境,然后调用 py2app.run方法)。

    不使用 2to3 通常会好得多,而是将代码转换为同时运行 python 3 和 python 2 的东西。当你可以放弃对 python 2.5 的支持时,这相当容易(当你只需要支持时更是如此2.7 或更高版本),因为 2.6 支持大多数 python 3 的语法。

    顺便说一句。 plistlib.Plist.fromFile 已弃用,请改用 plistlib.readPlist。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2011-09-12
      相关资源
      最近更新 更多