使用特定于版本(2/3)的代码打包python库

时间:2013-06-11 16:20:01

标签: python setuptools distutils

我有一个Python库,可以在Python 2和Python 3下编写,所有特定于版本的代码都集中在一个模块中,该模块存在两个变体,一个是Python 2的源代码文件,另一个是Python 3。 file包含在导入错误的Python版本时引发SyntaxError的代码。

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

1 个答案:

答案 0 :(得分:0)

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

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