Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让mypy识别较新版本的python?_Python_Python 3.x_Python 3.7_Mypy - Fatal编程技术网

如何让mypy识别较新版本的python?

如何让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重新安装

我刚刚将我的项目更新为Python 3.7,当我在项目上运行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')
    
  • 再次扫描项目(
    mypy.
    )[更新:这实际上可以正常工作。在新的Python版本venv上重新运行我的预提交挂钩,而没有重新安装预提交,这是导致问题的原因。]


解决方案很简单:只需使用--python版本标志运行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版本)

您正在较旧版本的Python下运行mypy
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
放入项目中(全球)科。