代码之家  ›  专栏  ›  技术社区  ›  Kim Stacks

当使用venv时,pylint-false-positive e0401在vscode中导入错误

  •  9
  • Kim Stacks  · 技术社区  · 7 年前

    我用python3.6在这个文件夹中的Mac操作系统上创建了一个venv /users/kim/documents/apps/pythonapps/python36-miros-a3

    激活虚拟环境后,我运行了一个 pip install pylint

    我的工作区位于 /users/kim/documents/apps/webapps/miros-a3

    在我的vscode工作区中,我有以下工作区设置

    。{
    “文件夹”:。[
    {
    路径“:”。
    }
    ],请
    “设置”:。{
    “python.pythonpath”:“/users/kim/documents/apps/pythonapps/python36-miros-a3/bin/python3.6”,
    “python.venvpath”:“/users/kim/documents/apps/pythonaps”
    }
    }
    

    我已尝试为pylint设置自定义路径,并更改venvpath。

    Pylint一直抱怨import语句,说它不存在。

    如您所见,它们在同一个文件夹中,我绝对可以执行我的python文件。

    我能做些什么来避免这种错误的正导入错误?

    我还尝试了以下方法:

    1. 转到命令行打开虚拟环境,然后键入code以激活此处建议的vscodehttps://code.VisualStudio.com/docs/setup/mac
    2. 还尝试了这一操作https://donjayamanne.github.io/pythonvscodedocs/docs/troubleshooting\linting/
    3. 〔ol〕。pip install pylint激活虚拟环境后

      我的工作区在/Users/kim/Documents/Apps/WebApps/miros-a3

      在我的vscode工作区中,我有以下工作区设置

      {
          "folders": [
              {
                  "path": "."
              }
          ],
          "settings": {
              "python.pythonPath": "/Users/kim/Documents/Apps/PythonApps/python36-miros-a3/bin/python3.6",
              "python.venvPath": "/Users/kim/Documents/Apps/PythonApps"
          }
      }
      

      我尝试为pylint设置自定义路径,并更改venvpath。

      皮林特一直在抱怨import语句,说它不存在。

      enter image description here

      enter image description here

      如您所见,它们在同一个文件夹中,而且我绝对可以执行我的python文件。

      我能做些什么来避免这种错误的正导入错误?

      我还尝试了以下方法:

      1. 转到命令行打开虚拟env,然后键入code按照这里的建议激活vscodehttps://code.visualstudio.com/docs/setup/mac
      2. 也试过这个https://donjayamanne.github.io/pythonVSCodeDocs/docs/troubleshooting_linting/
    2 回复  |  直到 7 年前
        1
  •  4
  •   Braca    7 年前

    皮林特有些怪癖。在这种情况下,它不知道在哪里找到您的模块,因为它在您的venv路径的子目录中。要解决此问题:

    1. 将此设置置于工作区或文件夹设置中:

      "python.linting.pylintArgs": [
          "--init-hook",
          "import sys; sys.path.append('<path to folder your module is in>')"
      ]
      

      或者,也许更好

    2. 生成.pylintrc文件。来自集成终端,VENV激活运行:

      pylint --generate-rcfile > .pylintrc 
      

      然后打开生成的文件并取消对 初始化挂钩= 部分内容:

      init-hook='import sys; sys.path.append("<path to folder you module is in>")'
      

      阅读 .皮林特克 如果你愿意,可以调整设置。在这两种情况下,路径都应该指向“数据库”文件夹。

    3. 在了解了pylint设置后,请按正确的方式进行操作:

      from database.database_dispatcher import ...
      

      参见 this answer 安东尼·索蒂尔。

        2
  •  4
  •   anthony sottile    7 年前

    对我来说, pylint 在此处标记此错误是正确的

    顶层模块是 database (它包含一个 __init__.py 文件)

    您的导入应该看起来像(完全绝对)

    from database.database_dispatcher import ...
    

    或(直系亲属)(是!这个 . 在有意使用模块名称之前)

    from .database_dispatcher import ...
    

    我的后续猜测是,您当前正在调用脚本 python ./database/main.py ... 哪个在放 ./database sys.path 所以它会 出现 您的导入工作正常——然而,这只是您的模块结构的一部分。您应该使用 python -m database.main ... 相反。

    注意 隐式亲属 在python 3.x中删除了导入内容——尽管这个(imo)脚本的缺点 搜索路径 插入保持不变。

    推荐文章