我有一个需要同时支持 Python 2 和 3 的 setup.py。
该代码当前可以运行并且可以在 Python 2.x 中安装
如果我将该use_2to3 = True
子句添加到我的 setup.py,那么该模块可以安装在 Python 3 中,但是,执行以下操作:
python setup.py test
导致失败,因为其中一个测试使用 StringIO 类,并且 Python 3 中的导入行出错(当前from StringIO import StringIO
是 ,在 Python3 中应该是from io import StringIO
我认为,一旦添加了 use_2to3 关键字,所有测试(包括单元测试)都会在测试之前由 2to3 处理。
我错过了什么?如果有帮助,我的 setup.py 的大部分内容如下所示:
from setuptools import setup
setup(
name='myproject',
version='1.0',
description='My Cool project',
classifiers = [
'Programming Language :: Python',
'Programming Language :: Python :: 3',
],
py_modules=['mymodule'],
test_suite='test_mymodule',
zip_safe=False,
use_2to3 = True,
)
编辑:我觉得好像 2to3 没有在 a 上运行的原因python setup.py test
是它爆炸了,堆栈跟踪的底部显示:
File "/home/aparkin/temp/mymodule/test_mymodule.py", line 18, in <module>
from StringIO import StringIO
但是,如果我在 test_mymodule.py 上运行 2to3,那么该导入行应该已经改写为:
from io import StringIO
并且(在最坏的情况下)测试应该单独失败。