Ada*_*kin 7 python unit-testing setup.py python-2to3 python-3.x
我有一个需要同时支持Python 2和3的setup.py.
代码当前可以工作,可以在Python 2.x中安装
如果我将该use_2to3 = True子句添加到我的setup.py中,那么该模块可以安装在Python 3中,但是,执行以下操作:
python setup.py test
Run Code Online (Sandbox Code Playgroud)
导致失败,因为其中一个测试使用StringIO类,并且导入行在Python 3 from StringIO import StringIO中蠢(目前,在Python3中它应该是from io import StringIO
我想虽然一旦你添加use_2to3关键字,所有测试(包括unittes)都会在测试之前由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,
)
Run Code Online (Sandbox Code Playgroud)
编辑:我觉得2to3没有运行的原因python setup.py test是它爆炸了,堆栈跟踪的底部是:
File "/home/aparkin/temp/mymodule/test_mymodule.py", line 18, in <module>
from StringIO import StringIO
Run Code Online (Sandbox Code Playgroud)
但是如果我在test_mymodule.py上运行2to3,那么该导入行应该被重新编写为:
from io import StringIO
Run Code Online (Sandbox Code Playgroud)
而且(最坏的情况下)测试应该单独失败.
为了让 distribution 能够拾取您的模块并在 2to3 中运行,它必须列在 py_modules 中。所以将其更改为:
py_modules=['mymodule', 'test_mymodule'],
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会在安装项目时安装 test_mymodule 带来副作用,而您可能不希望出现这种情况。对于这样的情况,我通常会将项目转换为带有 mymodule.tests 子包的包。这样,测试就可以“安装”,而不会增加额外的混乱。
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |