【问题标题】:setuptools: Run tests on build dir instead of original dirsetuptools:在构建目录而不是原始目录上运行测试
【发布时间】:2015-02-07 16:44:50
【问题描述】:

我目前正在尝试使为 Python2 编写的模块与 Python3.2 兼容。

我首先确保所有代码都可以使用2to3 自动转换并添加到 setup.py 中:

use_2to3 = True,

到目前为止,一切正常。

现在,我想测试转换后的文件。
这些测试的编写使得它们可以在没有2to3 的情况下运行。 我的文件夹结构是:

# ls /path/to/mymodule
setup.py
mymodule/
tests/
build/

我在 setup.py 中添加了

test_suite = "tests",

现在我执行

rm -rf build/
python3 setup.py build 
python3 setup.py test

为了测试我自动转换的代码。 但它失败了,因为测试仍然在mymoduledirectory 上运行:

File "/path/to/mymodule/mymodule/main.py", line 35
    logger.info(u'Scanning {path}'.format(path=self.path))
                                    ^
SyntaxError: invalid syntax
[This Syntax error is in MODULE code, not in TEST code.]
[I expect the path to be: /path/to/mymodule/build/lib/mymodule/main.py]

在我的build/ 中是正确转换的文件。 如果分发正确转换它们,为什么不为转换后的文件执行测试?

我错过了什么吗? 我已经检查了 setuptools/distribute 的文档以查找缺少的参数。 我不想将我的测试包含在模块中,因为有几个资源文件仅用于测试会占用不必要的空间。

=> 我可以将 setup.py 配置为在 python3 中运行时为不同的文件夹运行测试吗?

【问题讨论】:

    标签: python-3.x setuptools python-unittest distribute python-2to3


    【解决方案1】:

    首先,logger.info(u'Scanning {path}'.format(path=self.path)) 行在 Python 3.2 中无效。 u'' 的语法无效,因为 u 已在 Python 3.0 中删除,并在 Python 3.3 而非 3.2 中重新引入。

    这意味着您应该在没有此类 Unicode 字符串文字的情况下将您的测试转换为在 Python 3.2 中工作。一种替代方法是使用字节文字并对其进行解码 (b''.decode('UTF-8')),或者您可以简单地使用字符串,因为它们在 3.x+ 中已经是 Unicode。

    其次,我建议使用tox 在多个 Python 版本中测试您的代码库。它将使用提供的 setup.py 文件,创建多个虚拟环境并分别测试每个 Python 版本中的代码库。这意味着您可以在 2.x 和 3.x 中运行测试并验证一切是否仍然有效。

    2to3 无论如何都不是推荐的方法 - 应通过调整代码库以与 2.x 和 3.x 兼容来移植 Python 2.x 项目。

    【讨论】:

    • 嗨,“但它失败了,因为测试仍在 mymodule 目录上运行”。这不是测试代码,而是模块代码。 2to3转换后的代码是可以的,但是测试不是用这个代码执行的。
    • 无论如何,我会看看tox。我的第一种方法是尽量减少更改但尽可能集成以尊重原作者;)
    • @Nippey:无论如何,2to3 不是推荐的方法 - Python 2.x 项目应该通过调整代码库以与 2.x 和 3.x 兼容来移植。
    • Python 3.3+ 更容易...至少u'' 可以再次使用。如此糟糕的 setuptools 根本就提供了 2to3 选项。使用它太诱人了。我愿意接受您关于“调整代码库”和“使用 tox”的回答。也许你想扩展它^^
    • @Nippey:我认为从其他地方重复文档是没有意义的,但是是的,tox 和 2.x / 3.x 兼容的代码库确实是推荐的方法。
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2018-10-18
    • 2015-06-03
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多