302 votes

PyLint "Unable to import" error - comment définir PYTHONPATH ?

Je lance PyLint à partir de l'IDE Wing sur Windows. J'ai un sous-répertoire (package) dans mon projet et à l'intérieur du package j'importe un module du niveau supérieur, ie.

__init__.py
myapp.py
one.py
subdir\
    __init__.py
    two.py

A l'intérieur two.py J'ai import one et cela fonctionne bien au moment de l'exécution, parce que le répertoire de premier niveau (à partir duquel le système myapp.py est exécuté) se trouve dans le chemin d'accès à Python. Cependant, lorsque j'exécute PyLint sur two.py, il me donne une erreur :

F0401: Unable to import 'one'

Comment résoudre ce problème ?

243voto

Brian M. Hunt Points 12506

À ma connaissance, il existe deux options.

Premièrement, modifier le PYTHONPATH pour inclure le répertoire au-dessus de votre module.

Vous pouvez également modifier ~/.pylintrc pour inclure le répertoire au-dessus de votre module, comme ceci :

[MASTER]
init-hook='import sys; sys.path.append("/path/to/root")'

(Ou dans d'autres versions de pylint, l'init-hook vous demande de changer [General] en [MASTER])

Ces deux options devraient fonctionner.

123voto

alex_koval Points 86

La solution pour modifier le chemin en init-hook est bien, mais je n'aime pas le fait que j'ai dû y ajouter un chemin absolu, ce qui fait que je ne peux pas partager ce fichier pylintrc avec les développeurs du projet. Cette solution utilisant le chemin relatif au fichier pylintrc fonctionne mieux pour moi :

[MASTER]
init-hook="from pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"

Il convient de noter que pylint.config.PYLINTRC existe également et a la même valeur que find_pylintrc() .

74voto

jeanerpp Points 622

Le problème peut être résolu en configurant le chemin d'accès à pylint sous venv : $ cat .vscode/settings.json

{
    "python.pythonPath": "venv/bin/python",
    "python.linting.pylintPath": "venv/bin/pylint"
}

41voto

Jan Gabba Gabriel Points 509

Créer .pylintrc et ajouter

[MASTER]
init-hook="from pylint.config import find_pylintrc;
import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"

40voto

unmounted Points 10968

Disposez-vous d'un espace vide ? __init__.py dans les deux répertoires pour que python sache que les répertoires sont des modules ?

Le schéma de base est le suivant lorsque vous ne travaillez pas à partir du dossier (c'est-à-dire peut-être à partir de celui de pylint, bien que je ne l'aie pas utilisé) :

topdir\
  __init__.py
  functions_etc.py
  subdir\
    __init__.py
    other_functions.py

C'est ainsi que l'interpréteur python connaît le module sans référence au répertoire courant, de sorte que si pylint s'exécute à partir de son propre chemin absolu, il sera en mesure d'accéder à functions_etc.py comme topdir.functions_etc o topdir.subdir.other_functions , à condition que topdir est sur la PYTHONPATH .

MISE À JOUR : si le problème n'est pas dû à la __init__.py essayez de copier ou de déplacer votre module dans le fichier c:\Python26\Lib\site-packages -- c'est un endroit commun pour mettre des paquets supplémentaires, et sera certainement sur votre pythonpath. Si vous savez comment faire des liens symboliques Windows ou l'équivalent (je ne sais pas !), vous pouvez le faire à la place. Il y a beaucoup plus d'options ici : http://docs.python.org/install/index.html Il est possible d'ajouter à sys.path le répertoire de niveau utilisateur de votre code de développement, mais dans la pratique, je me contente de lier symboliquement mon répertoire de développement local aux sites-packages - le copier a le même effet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X