gpt4 book ai didi

python - setup.py 中的 2 到 3 没有涵盖测试?

转载 作者:太空狗 更新时间:2023-10-29 21:58:54 25 4
gpt4 key购买 nike

我有一个需要同时支持 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导入 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 没有在 python setup.py 测试 上运行的原因是它爆炸了,堆栈跟踪的底部显示:

File "/home/aparkin/temp/mymodule/test_mymodule.py", line 18, in <module>
from StringIO import StringIO

但是如果我在 test_mymodule.py 上运行 2to3,那么该导入行应该被修改为:

from io import StringIO

并且(在最坏的情况下)测试应该单独失败。

最佳答案

为了分发通过 2to3 获取您的模块并运行,它必须列在 py_modules 中。所以将其更改为:

py_modules=['mymodule', 'test_mymodule'],

不幸的是,这有一个副作用,即在您安装项目时安装 test_mymodule,这可能是您不想要的。对于这种情况,我通常会将项目转换为带有 mymodule.tests 子包的包。这样,测试就可以“可安装”,而不会增加额外的困惑。

关于python - setup.py 中的 2 到 3 没有涵盖测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10853688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com