1

我编写了一个 Python 库,可以在 Python 2 和 Python 3 下工作,所有特定于版本的代码都本地化在一个模块中,该模块以两种变体形式存在,一个用于 Python 2 的源代码文件,一个用于 Python 3 的源代码文件。每个文件都包含代码如果导入错误的 Python 版本,则会引发 SyntaxError。

当我用 distutils 打包我的库并安装它时,我总是会收到一个或另一个文件的语法错误报告。有没有办法摆脱这个?理想情况下,我想告诉 distutils/setuptools 忽略不适用于当前运行的 Python 版本的文件。

4

1 回答 1

0

distutils 导入所有模块以在构建时和/或安装时对它们进行字节编译(即创建 pyc 和可能的 pyo 文件)。目前没有选项可以跳过模块。您可以编写设置脚本,以便为 Python 2 和 Python 3 生成不同的 sdist(例如 somemodule2.py 不会包含在 Python 3 sdist 中),但并非所有工具都适用于不同的 sdist,包括 PyPI。

目前,我会尝试让每个模块在由 Python 2 或 3 导入时都不会引发 SyntaxError。或者我会按照 Martijn 的建议只编写一个模块,可能使用六个模块,如果最终结果不是太混乱(我见过非常可怕的 2 和 3 代码,所以我不喜欢那个解决方案,但是社区的很大一部分人选择了它,因为它有效)。

于 2013-06-12T16:46:59.753 回答