我目前正在尝试为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配置为运行不同文件夹的测试?
答案 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项目。