web-dev-qa-db-fra.com

pylint faux positifs E0401 erreurs d'importation dans vscode lors de l'utilisation de venv

J'ai créé un venv en utilisant python3.6 sur mon mac os dans ce dossier /Users/kim/Documents/Apps/PythonApps/python36-miros-a3

J'ai couru un pip install pylint après avoir activé l'environnement virtuel

Mon espace de travail est dans /Users/kim/Documents/Apps/WebApps/miros-a3

Dans mon espace de travail vscode, j'ai les paramètres d'espace de travail suivants

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

J'ai essayé de définir un chemin personnalisé pour le pylint et également de changer le venvpath.

Le pylint a continué de se plaindre de la déclaration d'importation en disant qu'elle n'existait pas.

enter image description here

enter image description here

Comme vous pouvez le voir, ils se trouvent dans le même dossier et je peux certainement exécuter mes fichiers python.

Que puis-je faire pour éviter ce type d'erreurs d'importation faussement positives?

J'ai également essayé ce qui suit:

  1. allez en ligne de commande, activez l'env virtuel, puis tapez code pour activer le vscode comme recommandé ici https://code.visualstudio.com/docs/setup/mac
  2. a également essayé cela https://donjayamanne.github.io/pythonVSCodeDocs/docs/troubleshooting_linting/
10
Kim Stacks

Pylint a quelques bizarreries. Dans ce cas, il ne sait pas où trouver votre module car il se trouve dans le sous-répertoire de votre chemin venv. Pour résoudre ceci:

  1. Placez ce paramètre dans les paramètres de votre espace de travail ou de votre dossier:

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

    ou peut-être mieux

  2. Générez un fichier .pylintrc. Depuis le terminal intégré avec course activée par venv:

    pylint --generate-rcfile > .pylintrc 
    

    puis ouvrez le fichier généré et décommentez la partie init-hook = pour être:

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

    Lisez les paramètres . Pylintrc et Tweak si vous le souhaitez. Dans les deux cas, le chemin doit pointer vers votre dossier "base de données".

  3. Après avoir appris les paramètres du pylône, faites-le de la bonne façon:

    from database.database_dispatcher import ...
    

    Voir cette réponse par Anthony Sottile.

8
Braca

Pour moi, pylint a raison de signaler cette erreur ici

le module de niveau supérieur est database (il contient un __init__.py fichier)

Votre importation doit ressembler à (entièrement absolue)

from database.database_dispatcher import ...

ou (relatif explicite) (oui! le . avant que le nom du module soit intentionnel)

from .database_dispatcher import ...

Je suppose que vous invoquez actuellement votre script en tant que python ./database/main.py ... qui met ./database au début de sys.path donc il semblerait apparaître que vos importations fonctionnent correctement - ceci est cependant un pas de côté dans la structure de votre module. Vous devriez invoquer votre script en utilisant python -m database.main ... au lieu.

Notez que relatif implicite les importations ont été supprimées dans python 3.x - bien que cette verrue (imo) du script sys.path l'insertion reste.

5
Anthony Sottile

Juste mon 0,02 $ sur la façon dont je l'ai corrigé dans ma situation.

Mon problème était totalement lié à l'installation de pylint dans le monde et au codage dans un venv. vscode essayait d'utiliser le pylint installé globalement qui n'était tout simplement pas au courant des dépendances que j'ai installées dans mon Python venv. Ce réponse a résolu mon problème. Il pointe ici qui a expliqué comment configurer vscode pour qu'il s'exécute en utilisant le venv pour mon projet. Une fois que j'ai fait cela, vscode a immédiatement lancé un avertissement disant que je n'avais pas d'outil de peluchage installé et m'a invité à en installer un. Une fois cela fait, mon peluchage faux -les positifs sont partis.

2
Gatmando