setuptools:在build dir而不是原始目录上运行测试

时间:2014-12-09 17:20:16

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

我目前正在尝试为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

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

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的文档以查找缺少的参数。 我不想将我的测试包含在模块中,因为有几个资源文件仅用于测试会占用不必要的空间。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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