52
votes

«Importation» path.to.own.script "ne pouvait pas être résolu pylance (reportMissingImImports) 'dans le code vs utilisant python 3.x sur Ubuntu 20.04 lts

c'est un situation similaire que j'avais rencontrée Il y a plusieurs mois en utilisant pylint avant pylance :

mon python 3.9x - le script (à l'aide de vs code sur ubuntu 20.04 lts ) commence par l'importation suivante des "outils" personnalisés:

(scrapy_course) andylu@andylu-Lubuntu-PC:~/$ add2virtualenv /home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts

Maintenant, pylance étages:

export PYTHONPATH="$PYTHONPATH:/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"

Cela se produit même si pendant l'exécution du programme Le module est parfaitement importé.

Ainsi, pour garantir la fabrication de pylance comprendre qu'il s'agit d'un chemin de module existant, en plus des sys.path.append (..) - Approche, j'ai ajouté ce qui suit au settings.json - Fichier:

import General.Misc.general_tools as tools  # type: ignore

Pourtant, je reçois toujours Le reportMissingImports -Message même s'il est correctement importé.

Une solution de contournement que j'ai trouvé ici Type: ignorez à la déclaration d'importation):

{
    ...
    // Possible values: "Jedi", "Pylance", "Microsoft", "None".
    "python.languageServer": "Pylance",
    // NOTE on changing from microsoft to pylance language server: python.autoComplete.extraPaths --> python.analysis.extraPaths
    // Docs: https://github.com/microsoft/pylance-release/blob/master/TROUBLESHOOTING.md#unresolved-import-warnings
    "python.analysis.extraPaths": [
        "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"
    ],
    ...
}

Néanmoins, c'est juste une solution de contournement, c'est pourquoi je cherche à résoudre la racine de ce problème. Techniquement, c'est la même solution de contournement J'ai utilisé plus tôt pour me débarrasser des messages d'avertissement similaires de Pylint . C'est probablement quelque chose d'inhérent à la configuration vs-code settings.json - car l'utilisation de vs-code est le facteur constant ici. P >


modifier des mesures supplémentaires qui n'ont pas résolu le problème:

J'ai ajouté

Import "General.Misc.general_tools" could not be resolvedPylance (reportMissingImports)

à mon ~ / .bashrc - fichier, qui me permet maintenant d'importer le module directement dans un python -shell du terminal sans le sys précédent - Manipulation du chemin. Cela s'applique cependant uniquement à l'environnement mondial du système Python, mais pas à un environnement virtuel. Afin de changer le Sys-Path là-bas, j'ai suivi ces instructions , tandis que mon environnement virtuel particulier "Scrapy_Course" est ouvert, comme ainsi:

import sys
sys.path.append(
    '/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/'
)

import General.Misc.general_tools as tools

Cette commande s'applique à virtualenvwrapper , qui gère les environnements virtuels en conjonction avec pyenv bien. Maintenant, je peux exécuter mon script susmentionné dans l'environnement actuel même sans le sys.path.append (...) avant d'importer le module, mais pylance ne fait toujours pas ' t reconnaître correctement les chemins et me montre le même avertissement qu'auparavant.


modifier "python.analysis.Useimporthéouristique": true :

J'ai eu cette option constamment activée dans mon fichier global settings.json - et je n'ai toujours remarqué aucun effet. Je vous tiendrai au courant une fois que cela devrait changer, ou enfin une solution (différente) se croise.


modifier la suppression / désactiver le pylance 'reportMissingImImports' ling message: Strong>

J'ai découvert comment supprimer un pylance spécifique-message Si cela présente votre intérêt en tant que solution de contournement. Surtout dans ma situation actuelle, j'ai besoin d'utiliser pylint dans Parallèle Quoi qu'il en soit, donc je ne dépend pas du tout du linter de Pylance.


5 commentaires

Est-ce que cela résoudra si vous faites Importer General , que se passe-t-il si vous ajoutez le chemin à pythonpath avant de démarrer VSC. Peut-être que Pylance ne veut que des chemins relatifs dans "python.analysis.extrapaths"


Merci pour votre indice. Cela m'a fait essayer des mesures supplémentaires (voir l'édition de mon poste initial ci-dessus). Je reçois toujours le même message d'avertissement de Pylance. En dehors de cela, un chemin absolu devrait toujours fonctionner en ce qui me concerne, mais même si c'était le problème, il y a maintenant tout python - et sys -Paths Définissez dans mon projet- Venv , et toujours pylance ne le reconnaît pas.


Envisagez ensuite de déposer un problème avec Pylance n'adhérant pas à pytonpath , mais comment les environnements virtuels fusionnent les modules locaux et installés par le système, Pylance peut gérer ces


Maintenant, pour une raison quelconque, il a cessé de lancer les avertissements. Je ne sais pas comment il a été résolu, mais pour l'instant j'ai fermé le problème publié sur le site Web pylance github: github.com/microsoft/pylance-release/issues/724


Je reçois le même problème de liaison. Il semble qu'il n'y ait toujours pas de solution autre que d'ajouter # type: ignorer à la fin de l'instruction IMPORT.


7 Réponses :


48
votes

Pylance, par défaut, inclut le chemin racine de votre espace de travail. Si vous souhaitez inclure d'autres sous-répertoires comme chemins de résolution d'importation, vous pouvez les ajouter à l'aide du paramètre python.analysis.extrapaths pour l'espace de travail.

  • Dans VS Code, appuyez sur + <,> pour ouvrir les paramètres.
  • Tapez python.analysis.extrapaths
  • Sélectionnez "Ajouter un élément"
  • Tapez le chemin de votre bibliothèque / home / andylu / dokumete / allgemeines_material / sonstiges / programming / python / scripts /

7 commentaires

Merci pour votre réponse. Pourtant, comme vous pouvez le voir dans mon message, j'ai déjà essayé cela sans usage. Peut-être que cela a un effet maintenant. Dès que je peux l'essayer, je vous le ferai savoir.


Existe-t-il une solution moins spécifique? Je veux dire, si j'utilise cette solution, je dois ajouter tous les chemins à tous les dossiers où se trouvent tous les scripts de test.


J'utilise VirtualEnv pour mon projet (django) et j'ai dû faire référence au chemin pour que cela fonctionne: ~ / .VirtualEnvs / / lib / site-packages /


En plus de cela, assurez-vous de sélectionner et activer le Environnement python correct .


Cela fonctionne parfaitement lorsque le dossier "source" est nommé autre chose que "SRC".


Ne fonctionne pas pour moi sur macOS et la dernière version de VScode à l'aide de Pylance. Mon conda envisage bien le travail.


Cette solution a fonctionné pour moi où j'ai installé du pylucene pour fonctionner via JCC. Plus tôt, l'achèvement automatique du package, par ex. depuis org.apache.lucene.analysis.standard Import StandardAnalyzer ne fonctionnait pas. Cette solution a fonctionné pour moi après un redémarrage du VScode.



27
votes

Deux méthodes ci-dessous:

  • Dans le code vs, vous pouvez modifier le fichier setting.json . Si vous ajoutez "Python.analysis.UseimporthEuristic": true L'erreur de liaison sera supprimée.

  • L'alternative consiste à ajouter # type: ignorer à la fin du code d'import.

  • Voici le lien github dont j'ai obtenu la résolution ci-dessus: https: // github .com / Microsoft / Pylance-Release / Issues / 68

    Cela a fonctionné pour moi: python 3.9 , vscode , windows10


    7 commentaires

    Merci pour votre contribution. J'ai également suivi le Discussion Git et vu le "Python.analysis.UseimporthEuristic": true , je vais l'essayer une fois que j'y arriverai. Quant à la 2ème alternative, cette solution de contournement a déjà été mentionnée dans mon poste initial et semble être le dernier recours, si rien d'autre ne fonctionne.


    commentaire noté. Je confirme que les deux méthodes fonctionnent sur la configuration que j'ai, bien qu'il semble que vous utilisez lubuntu 20.04 alors que j'ai testé windows10 . Il serait donc utile de savoir qu'il est agnostique ou autre.


    Je viens de le vérifier sur Windows 10, dans mon settings.json la ligne "python.analysis.UseImporthEuristic": true est grisé. Lorsque je survole dessus, il indique "Paramètre de configuration inconnu".


    @Andreasl. Il en va de même lorsque j'ai obtenu le "Paramètre de configuration inconnu" . Avez-vous trouvé une solution de contournement pour cela?


    @Prakharrathi pas encore, je vous ferai savoir ici s'il y a des mises à jour


    Ceci est attendu car il s'agit d'une option cachée. github.com/microsoft/pylance-release/issues/…


    J'ai revisité le problème aujourd'hui, et il y a toujours des erreurs d'importation malgré l'utilisation de "python.analysis.UseimporthEuristic": true (voir la dernière modification de mon OP). Je vous tiendrai au courant des gars.



    2
    votes

    J'étais confronté à un problème similaire, même après avoir des packages sur mon système, VS Code Pylance n'a pas pu résoudre les importations.

    Dans mon cas, j'ai eu 2 versions différentes de Python installées (une utilisant une distribution anaconda et d'autres directement à partir de python.org)

    Correction: sélectionnez l'interpréteur Python droit dans VS Code. Le pylance cessera de se plaindre :)

     Entrez la description de l'image ici


    1 commentaires

    Cela a fonctionné pour moi. Merci!



    6
    votes

    Par défaut, Python sélectionne l'interprète global comme interprète pour tout projet Python que vous avez. La résolution du module / package est donc dans le contexte global. Pour tout linter que vous utilisez pour récupérer vos modules installés, vous devez vous assurer de sélectionner le bon interprète

    Par exemple, si vous avez déjà travaillé avec PyCharm, il vous demande de sélectionner l'interprète et de créer un environnement virtuel avec l'interpréteur sélectionné. Pour la même chose, si vous démarrez un projet dans Visual Studio Code, il faut l'interprète global comme interprète par défaut même si vous créez un environnement virtuel, voyez-le dans la section inférieure gauche pour l'interpréteur sélectionné

     Entrez la description de l'image ici

    Alors, comment assurez-vous que les modules Pylance / Pylint / Reads installés dans l'environnement virtuel créé? Vous devez vérifier l'interprète sélectionné en bas à gauche et s'il n'est pas activé dans l'environnement virtuel, cliquez sur l'interpréteur sélectionné et VS-Code vous invitera à sélectionner un interprète par défaut pour le projet. Sélectionnez votre environnement virtuel actuel et Visual Studio Pylance lira les modules dans l'environnement actuel. J'espère que cela fonctionne pour quiconque a du mal avec le même

     Entrez la description de l'image ici

     Entrez la description de l'image ici


    2 commentaires

    Cela fonctionne, mais certains d'entre nous essaient également d'ajouter d'autres SYS.Paths en dehors de l'ENV actuel, et Pylance ne les reconnaîtra pas, même s'ils sont configurés correctement et fonctionnent lorsque nous exécutons les fichiers PY. cet exemple était la seule chose qui a fonctionné pour moi.


    Vous pouvez ajouter ces chemins dans le ./ vscode / settings.json à partir de l'endroit où VScode lit toutes les configurations à partir de si le settings.json est défini



    1
    votes

    Une autre option consiste à ajouter un fichier .env à la racine du projet VScode. Par exemple:

    .env

    PYTHONPATH=src/mydir
    

    Vous utilisez soit un chemin relatif comme ci-dessus, soit le chemin complet. L'avantage de .env est qu'il corrigera à la fois pylance et pylint dans vscode. Et il est plus facile de s'engager et de partager sur git que .vscode / settings.json .


    0 commentaires

    1
    votes

    pylance est la valeur par défaut que le serveur de langue utilisé pour le projet Python, sauf si vous le spécifiez autrement. Si vous obtenez (reportMissingImports) et que vous êtes sûr que la dépendance a été installée avec succès, cela signifie qu'il est installé ailleurs que Pylance attendu. Cela se produit généralement si vous travaillez avec des environnements virtuels.

    pylance par défaut sélectionne l'interprète Python System pour tout projet Python, dans ce cas, vous devez indiquer à Pylance où trouver l'interpréteur VirtualEnv Python par Définir cela vos paramètres vscode . Sous .vscode / settings.json Ajoutez ce qui suit:

    {
        "python.defaultInterpreterPath": "~/.pyenv/versions/3.10.2/envs/<my-virtual-env-name>/bin/python",
        "python.linting.ignorePatterns": [
            "**/site-packages/**/*.py"
        ],
        "python.analysis.extraPaths": [
            "my-custom-path-1/python/scripts", 
            "my-custom-path-2/something-else"
        ],
    }
    

    Pylance saura exactement où chercher la dépendance installée. Dans mon cas, j'utilise pyenv mais il peut s'agir de tout autre chemin en fonction de l'outil VirtualEnv que vous utilisez. Si vous avez d'autres dépendances dans un autre emplacement personnalisé, vous pouvez les ajouter en spécifiant "python.analysis.extrapaths" :

    {
        "python.defaultInterpreterPath": "~/.pyenv/versions/3.10.2/envs/<my-virtual-env-name>/bin/python",
        "python.linting.ignorePatterns": [
            "**/site-packages/**/*.py"
        ],
    }
    


    0 commentaires

    0
    votes

    Si vous utilisez un environnement Anaconda, une solution de contournement consiste à ajouter votre chemin de bibliothèque personnelle au «chemin de bibliothèque Python» via la commande conda développer le chemin / vers / votre / module .


    0 commentaires