0

我有一个setup.py使用 py2app,我想2to3在构建应用程序之前运行将 python 脚本转换为 Python 3 兼容。我使用了选项setup(use_2to3=True),但它没有调用2to3。所以现在我用 aMakefile来解决这个问题。任何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,
)

谢谢。

4

1 回答 1

0

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。

于 2013-06-18T10:46:56.610 回答