代码之家  ›  专栏  ›  技术社区  ›  Bruno Rijsman

pylint:“导入模块时出现问题…:无法导入名称'type'”

  •  5
  • Bruno Rijsman  · 技术社区  · 7 年前

    每次运行pylint(无论检查什么程序)都会产生以下错误消息:

    (env) $ pylint hello.py 
    Problem importing module logging.py: cannot import name 'Type'
    Problem importing module spelling.py: cannot import name 'Type'
    Problem importing module python3.py: cannot import name 'Type'
    Problem importing module typecheck.py: cannot import name 'Type'
    Problem importing module variables.py: cannot import name 'Type'
    Problem importing module refactoring.py: cannot import name 'Type'
    Problem importing module format.py: cannot import name 'Type'
    Problem importing module imports.py: cannot import name 'Type'
    Problem importing module utils.py: cannot import name 'Type'
    Problem importing module newstyle.py: cannot import name 'Type'
    Problem importing module exceptions.py: cannot import name 'Type'
    Problem importing module classes.py: cannot import name 'Type'
    Problem importing module stdlib.py: cannot import name 'Type'
    Problem importing module async.py: cannot import name 'Type'
    Problem importing module design_analysis.py: cannot import name 'Type'
    Problem importing module base.py: cannot import name 'Type'
    Problem importing module strings.py: cannot import name 'Type'
    Traceback (most recent call last):
      File "/Users/brunorijsman/python-logging-performance/env/bin/pylint", line 11, in <module>
        sys.exit(run_pylint())
      File "/Users/brunorijsman/python-logging-performance/env/lib/python3.5/site-packages/pylint/__init__.py", line 20, in run_pylint
        Run(sys.argv[1:])
      File "/Users/brunorijsman/python-logging-performance/env/lib/python3.5/site-packages/pylint/lint.py", line 1557, in __init__
        linter.enable("c-extension-no-member")
      File "/Users/brunorijsman/python-logging-performance/env/lib/python3.5/site-packages/pylint/utils.py", line 323, in enable
        msgid, enable=True, scope=scope, line=line, ignore_unknown=ignore_unknown
      File "/Users/brunorijsman/python-logging-performance/env/lib/python3.5/site-packages/pylint/utils.py", line 366, in _set_msg_status
        msg = self.msgs_store.get_message_definition(msgid)
      File "/Users/brunorijsman/python-logging-performance/env/lib/python3.5/site-packages/pylint/utils.py", line 989, in get_message_definition
        msgid_or_symbol=msgid_or_symbol
    pylint.exceptions.UnknownMessageError: No such message id c-extension-no-member
    

    在这个特殊的例子中,我检查了下面的小程序 hello.py :

    print("Hello")
    

    但当我不检查程序时,问题也会出现,例如 pylint --version

    pylint正在虚拟环境中运行,我创建的虚拟环境如下:

    $ python3 -m virtualenv env
    Using base prefix '/Library/Frameworks/Python.framework/Versions/3.5'
    New python executable in /Users/brunorijsman/python-logging-performance/env/bin/python3
    Also creating executable in /Users/brunorijsman/python-logging-performance/env/bin/python
    Installing setuptools, pip, wheel...done.
    $ source env/bin/activate
    (env) $
    

    (注意:我认识到现在建议使用模块venv而不是virtualenv,但是我在MacOS上使用venv有不同的问题,如中所述。 'pip install' fails for every package ("Could not find a version that satisfies the requirement") )

    我将pylint安装到虚拟环境中,如下所示:

    (env) $ pip install pylint
    Collecting pylint
      Using cached https://files.pythonhosted.org/packages/a5/06/ecef826f319055e6b231716730d7f9047dd7524ffda224b521d989f085b6/pylint-2.2.2-py3-none-any.whl
    Collecting isort>=4.2.5 (from pylint)
      Using cached https://files.pythonhosted.org/packages/1f/2c/22eee714d7199ae0464beda6ad5fedec8fee6a2f7ffd1e8f1840928fe318/isort-4.3.4-py3-none-any.whl
    Collecting astroid>=2.0.0 (from pylint)
      Using cached https://files.pythonhosted.org/packages/fc/53/8809bc008bad0300897281a7b320b286dc0e84e836396c0cff6279841e8a/astroid-2.1.0-py3-none-any.whl
    Collecting mccabe (from pylint)
      Using cached https://files.pythonhosted.org/packages/87/89/479dc97e18549e21354893e4ee4ef36db1d237534982482c3681ee6e7b57/mccabe-0.6.1-py2.py3-none-any.whl
    Collecting typed-ast; python_version < "3.7" and implementation_name == "cpython" (from astroid>=2.0.0->pylint)
    Collecting wrapt (from astroid>=2.0.0->pylint)
    Collecting six (from astroid>=2.0.0->pylint)
      Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
    Collecting lazy-object-proxy (from astroid>=2.0.0->pylint)
    Installing collected packages: isort, typed-ast, wrapt, six, lazy-object-proxy, astroid, mccabe, pylint
    Successfully installed astroid-2.1.0 isort-4.3.4 lazy-object-proxy-1.3.1 mccabe-0.6.1 pylint-2.2.2 six-1.11.0 typed-ast-1.1.0 wrapt-1.10.11
    

    版本信息:

    操作系统为MacOS High Sierra 10.13.6

    (env) $ python --version
    Python 3.5.1
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   I_Al-thamary    7 年前

    您的python版本似乎与特定的pylint和astroid兼容。python 3.5自带了自己的打字版本,在引入typing.type之前添加了这个版本。因此,这可以解决问题:

    pip install astroid==1.5.3 pylint==1.8.2

    这个问题发生在python 3.5上

    https://github.com/PyCQA/pylint/issues/1216

    https://github.com/python/mypy/issues/1838