Python 升级pytest会导致TypeError:';非类型';对象不可调用错误

Python 升级pytest会导致TypeError:';非类型';对象不可调用错误,python,django,pytest,pytest-django,Python,Django,Pytest,Pytest Django,需要帮助升级pytest。在3.2.4中,如果我移动到3.3.x或3.4.x,我会得到一个我不理解的错误,我甚至无法执行-h参数。不知道从哪里开始,也不知道为什么会这样。可能是我的virtualenv有问题 新鲜虚拟 我确实尝试过从一个全新的virtualenv开始,但是,我仍然得到同样的错误。恢复到3.2.4将修复此问题 工作: 升级至3.3.x $pytest--版本 这是pytest版本3.3.2,从/Users/me/.virtualenvs/hitcount/lib/python3.5

需要帮助升级
pytest
。在3.2.4中,如果我移动到3.3.x或3.4.x,我会得到一个我不理解的错误,我甚至无法执行
-h
参数。不知道从哪里开始,也不知道为什么会这样。可能是我的
virtualenv
有问题

新鲜虚拟 我确实尝试过从一个全新的virtualenv开始,但是,我仍然得到同样的错误。恢复到
3.2.4
将修复此问题

工作: 升级至3.3.x
$pytest--版本
这是pytest版本3.3.2,从/Users/me/.virtualenvs/hitcount/lib/python3.5/site-packages/pytest.py导入
$pytest——帮助
回溯(最近一次呼叫最后一次):
文件“/Users/me/.virtualenvs/hitcount/bin/pytest”,第11行,在
sys.exit(main())
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site-packages/_-pytest/config.py”,第59行,在main中
return config.hook.pytest\u cmdline\u main(config=config)
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/_init__.py”,第617行,在调用中__
返回self.\u hookexec(self,self.\u非包装器+self.\u包装器,kwargs)
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/_init__.py”,第222行,在hookexec中
返回self.\u inner\u hookexec(钩子、方法、kwargs)
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/_init__.py”,第216行,在
firstresult=hook.spec_opts.get('firstresult'),
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/callers.py”,第201行,在多调用中
返回结果。获取结果()
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/callers.py”,第76行,在get_结果中
raise ex[1]。使用_回溯(ex[2])
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/callers.py”,第180行,在多调用中
res=钩子函数(*args)
pytest\u cmdline\u main中的文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/\u pytest/helpconfig.py”,第102行
配置。_do_configure()
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/\u pytest/config.py”,第921行,在\u do\u configure中
self.hook.pytest\u configure.call\u historic(kwargs=dict(config=self))
文件“/Users/me/.virtualenvs/hitcount/lib/python3.5/site packages/pluggy/_init__.py”,第630行,在call\u中
过程(x)
TypeError:“非类型”对象不可调用
资料来源:
这是针对我维护的一个开源项目:

您遇到的不是
pytest
中的bug,而是基于插件库的,
pluggy
。该错误在2个月前已修复(),但不幸的是,当前最新版本的
pluggy
(0.6.0)不包含此修复

因此,您有两种可能性:

依赖于
pluggy
snapshot 这是侵入性最小的
pytest
不需要严格版本的
pluggy
,因此只需要开发版本,直到下一个
pluggy
版本:

# tests/requirements.txt

coverage==4.5.1
flake8==2.5.4
mock==2.0.0
pytest==3.4.2
pytest-django==3.1.2
selenium==3.10.0
tox==2.9.1
# add some meaningful explanation here 
# so you don't forget why you need this particular snapshot of pluggy
git+https://github.com/pytest-dev/pluggy@dcde058f93a509b9c39409fca02100e43bb43485
发布下一个版本后,请删除快照依赖项和凹凸:

pluggy>0.6.0
调整
pytest\u配置
hook
调整
pytest\u配置
hook,使其不返回任何内容:

def configure():
    from django.conf import settings

    settings.configure(
        ...

    return settings

def pytest_configure():
    configure()

不要忘记调用
runtests.py
中的
configure()
函数,而不是
pytest\u configure()
,这样就可以开始了。但是,这只是一个临时解决办法,一旦发布了
pluggy>0.6.0
,就可以恢复。

通过将pytest升级到4.0.1,这个问题可以得到解决。pytest>5.1的最新版本与python>3.4不兼容。

最有可能是您的环境出现了问题。我刚安装了一个frsh,它可以正常工作。Python3.6.4和pytest 3.3.2,Manjaro上的pipenv。感谢您的建议——我确实尝试安装了一个新的virtualenv,但我遇到了同样的问题。参照
3.2.4
解决此问题。叹气。安装的一些插件可能有问题-运行
pip list--format=freeze | grep pytest
查看是否有-或者在
conftest.py
文件中有一些自定义代码-您在那里定义了什么吗?也许还有其他的钩子?试着创造一个可复制的环境。pipenv安装pytest为您提供了一个可工作的venv。@hoefling-是<代码>pytest django==3.1.2。。。是的,我正在使用一个定制的运行程序进行测试。。。只是想在错误消息中找到一些有用的东西来弄清楚发生了什么+100 ! 谢谢你的下一个关卡。我自己永远也不可能做到这一点。荣誉很高兴我能帮忙!
pluggy>0.6.0
def configure():
    from django.conf import settings

    settings.configure(
        ...

    return settings

def pytest_configure():
    configure()