AttributeError: 'module' object has no attribute 'ensuretemp'

AttributeError: 'module' object has no attribute 'ensuretemp'

按照 http://py.readthedocs.org/en/latest/path.html#basic-interactive-example

中的示例
import py
temppath = py.test.ensuretemp('py.path_documentation')

引发错误 AttributeError: 'module' 对象没有属性 'ensuretemp'

Python 版本 3.4.3,py 版本 1.4.26。

In [1]: import py

In [2]: dir(py.test)
Out[2]:
['Class',
 'Collector',
 'File',
 'Function',
 'Generator',
 'Instance',
 'Item',
 'Module',
 'Session',
 'UsageError',
 '__all__',
 '__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 '__version__',
 '_fillfuncargs',
 '_preloadplugins',
 'cmdline',
 'collect',
 'deprecated_call',
 'exit',
 'fail',
 'fixture',
 'freeze_includes',
 'importorskip',
 'main',
 'mark',
 'raises',
 'set_trace',
 'skip',
 'xfail',
 'yield_fixture']


In [4]: py.test.__file__
Out[4]: '/home/vagrant/.virtualenvs/snap/lib/python3.4/site-packages/pytest.py'

我是不是做错了什么?

不,如文档所示,您所做的一切都是正确的。我也无法让它工作。另一方面,pytest 有 fixture tmpdir,它可以满足您在测试中的需要:为您的测试提供唯一的临时目录。

这里是一个测试例子:

def test_one(tmpdir):
    test_file = tmpdir.join('dir', 'file').ensure(file=True)
    test_file.write('test\ntest\n')

    assert test_file.read().rsplit() == ['test', 'test']

另一方面,pytest 使用 py.path,它有 py.path.local 对象,使用 tempfile.mkdtemp 你可以创建临时目录对象:

import tempfile

tempdir = py.path.local(tempfile.mkdtemp())

您也可以直接从 py.path

使用 mkdtemp
In [127]: import py.path    
In [128]: py.path.local.mkdtemp()
Out[128]: local('/tmp/tmpP1835f')