如何让mypy识别较新版本的python?
我刚刚将我的项目更新为Python 3.7,当我在项目上运行mypy时,我看到了这个错误:如何让mypy识别较新版本的python?,python,python-3.x,python-3.7,mypy,Python,Python 3.x,Python 3.7,Mypy,我刚刚将我的项目更新为Python 3.7,当我在项目上运行mypy时,我看到了这个错误:错误:“Type[datetime]”没有属性“fromisoformat” datetime在Python3.7中确实有一个函数fromisoformat,但在Python的早期版本中没有。为什么mypy报告这个错误,我如何让它正确地分析Python 3.7 到目前为止我尝试过的事情: 正在删除.mypy_缓存(其中有一个名为3.6的可疑子文件夹) 使用pip安装--升级--强制重新安装mypy重新安装
错误:“Type[datetime]”没有属性“fromisoformat”
datetime
在Python3.7中确实有一个函数fromisoformat
,但在Python的早期版本中没有。为什么mypy报告这个错误,我如何让它正确地分析Python 3.7
到目前为止我尝试过的事情:
- 正在删除.mypy_缓存(其中有一个名为
的可疑子文件夹)3.6
- 使用
pip安装--升级--强制重新安装mypy重新安装mypy
- 创建一个Python3.6项目
- 在项目venv中安装mypy 0.761(最新版本)
- 用mypy扫描项目(
)mypy.
- 将项目更新为python 3.7
- 添加包含以下代码的文件:
from datetime import datetime datetime.fromisoformat('2011-11-04 00:05:23.283')
- 再次扫描项目(
)[更新:这实际上可以正常工作。在新的Python版本venv上重新运行我的预提交挂钩,而没有重新安装预提交,这是导致问题的原因。]mypy.
——python版本=3.7
如果使用,还可以将其作为参数添加到.pre-commit config.yaml
中的预提交检查中。我的看起来像这样:
repos:
...
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.750 # Use the sha / tag you want to point at
hooks:
- id: mypy
args: [--python-version=3.7]
如果经常从命令行运行mypy,还可以将其添加到配置文件中,如下所述
另一个注意事项:如果mypy在预提交钩子运行时报告错误,而不是在项目venv中自己运行时报告错误,那么您需要
- 像上面那样添加python版本作为参数,或者
- 在新项目venv中重新安装预提交(使用正确的python版本)
mypy
默认为用于运行它的Python版本
您有两个选择:
- 您可以使用以下命令更改Python语言版本:
此标志将使mypy类型检查您的代码,就像它在Python版本X.Y下运行一样。如果没有此选项,mypy将默认使用运行mypy的Python的任何版本
我会把这个放在盒子里;命令行开关的等价物命名为;将其放入全局
部分:[mypy]
[mypy] python_version = 3.7
- 将mypy安装到项目的virtualenv中,以便它使用完全相同的Python版本
请注意,如果您看到此问题(并且没有在命令行或中意外设置
--python version
,您肯定不是从项目venv运行mypy。事实上,您无法按照给出的说明重现您的问题。如果您按照说明将mypy安装到项目venv中,并将项目venv升级到3.7,请在在venv,您不会遇到此错误。换句话说,您会遇到此问题,因为您在项目venv之外安装了一个运行在Python 3.6或更早版本上的mypy
。与其每次都在命令行上设置它,不如将其作为[mypy]
下的Python\u version=3.7
放入项目中(全球)科。