J'exécute PyLint depuis Wing IDE sous 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
À l'intérieur, two.py
j'ai import one
et cela fonctionne bien au moment de l'exécution, car le répertoire de niveau supérieur (à partir duquel myapp.py
est exécuté) se trouve dans le chemin Python. Cependant, lorsque j'exécute PyLint sur two.py, cela me donne une erreur:
F0401: Unable to import 'one'
Comment puis-je réparer ça?
~/.pylintrc
a travaillé pour moi sur OSX, l'autre n'a pas fonctionnéexport PYTHONPATH
pour qu'ilpylint
le voie (au moins, dans bash / zsh)La solution pour modifier le chemin
init-hook
est bonne, mais je n'aime pas le fait que j'ai dû y ajouter un chemin absolu, par conséquent je ne peux pas partager ce fichier pylintrc entre les développeurs du projet. Cette solution utilisant un chemin relatif vers le fichier pylintrc fonctionne mieux pour moi:Notez qu'il
pylint.config.PYLINTRC
existe également et a la même valeur quefind_pylintrc()
.la source
.
(point).app
) vous pouvez utiliserfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path est une liste.
2) Le problème est parfois que sys.path n'est pas votre virtualenv.path et que vous souhaitez utiliser pylint dans votre virtualenv
3) Donc, comme dit, utilisez init-hook (faites attention dans 'et "l'analyse de pylint est stricte)
ou
.. et
la source
pylint
dans mon virtualenv selon ce conseil: plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
dans votre dossier de départ.Le problème peut être résolu en configurant le chemin pylint sous venv: $ cat .vscode / settings.json
la source
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
juste pour être complet.The setting "python.pythonPath" defined in your settings.json is now deprecated.
si je supprime lapython.pythonPath
ligne, cela semble toujours fonctionner.Avez-vous un
__init__.py
fichier vide dans les deux répertoires pour faire savoir à python que les répertoires sont des modules?Le plan de base lorsque vous ne courez pas à partir du dossier (c'est-à-dire peut-être de pylint, bien que je ne l'utilise pas) est:
C'est ainsi que l'interpréteur python est conscient du module sans référence au répertoire courant, donc si pylint s'exécute à partir de son propre chemin absolu, il pourra accéder en
functions_etc.py
tant quetopdir.functions_etc
outopdir.subdir.other_functions
, à condition qu'iltopdir
soit sur lePYTHONPATH
.MISE À JOUR: Si le problème n'est pas le
__init__.py
fichier, essayez peut-être de copier ou de déplacer votre module versc:\Python26\Lib\site-packages
- c'est un endroit courant pour mettre des paquets supplémentaires, et sera certainement sur votre chemin python. Si vous savez comment créer 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 , y compris l'option d'ajouter sys.path avec le répertoire de niveau utilisateur de votre code de développement, mais en pratique, je lie généralement symboliquement mon répertoire de développement local vers les packages de site - le copier a le même effet.la source
__init__.py
dans les deux répertoires. Je pense que le problème est que le répertoire supérieur n'est PAS dans PYTHONPATH lorsque PyLint s'exécute et je ne sais pas comment résoudre ce problème.réponse générale à cette question que j'ai trouvée sur cette page VEUILLEZ NE PAS OUVRIR, LE SITE EST BOGUE
créer
.pylintrc
et ajouterla source
Je ne sais pas comment cela fonctionne avec WingIDE, mais pour utiliser PyLint avec Geany, j'ai défini ma commande externe sur:
où% f est le nom du fichier et% d est le chemin. Cela pourrait être utile pour quelqu'un :)
la source
J'ai dû mettre à jour la
PYTHONPATH
variable système pour ajouter mon chemin App Engine. Dans mon cas, je devais juste éditer mon~/.bashrc
fichier et ajouter la ligne suivante:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
En fait, j'ai essayé de définir le
init-hook
premier mais cela n'a pas résolu le problème de manière cohérente dans ma base de code (je ne sais pas pourquoi). Une fois que je l'ai ajouté au chemin du système (probablement une bonne idée en général), mes problèmes ont disparu.la source
Une solution de contournement que je viens de découvrir est de simplement exécuter PyLint pour l'ensemble du package, plutôt qu'un seul fichier. D'une manière ou d'une autre, il parvient alors à trouver le module importé.
la source
pylint ... dir
partir du dossier parent. Cela nécessite__init__.py
d'être présent dans chaque sous-dossier avec des.py
fichiers.EssayerNotez que dans Python 3, la syntaxe de la partie de la
else
clause seraitÀ la réflexion, cela ne résoudra probablement pas votre problème spécifique. J'ai mal compris la question et j'ai pensé que two.py était exécuté en tant que module principal, mais ce n'est pas le cas. Et compte tenu des différences dans la manière dont Python 2.6 (sans importer
absolute_import
depuis__future__
) et Python 3.x gèrent les importations, vous n'auriez pas besoin de le faire pour Python 2.6 de toute façon, je ne pense pas.Néanmoins, si vous passez éventuellement à Python 3 et que vous prévoyez d'utiliser un module à la fois comme module de package et comme script autonome à l'intérieur du package, il peut être judicieux de conserver quelque chose comme
à l'esprit.
EDIT: Et maintenant pour une solution possible à votre problème réel. Exécutez PyLint à partir du répertoire contenant votre
one
module (via la ligne de commande, peut-être), ou placez le code suivant quelque part lors de l'exécution de PyLint:Fondamentalement, au lieu de jouer avec PYTHONPATH, assurez-vous simplement que le répertoire de travail actuel est le répertoire contenant
one.py
lorsque vous effectuez l'importation.(En regardant la réponse de Brian, vous pourriez probablement attribuer le code précédent à
init_hook
, mais si vous voulez le faire, vous pouvez simplement ajoutersys.path
ce qu'il fait, ce qui est légèrement plus élégant que ma solution.)la source
La clé est d'ajouter votre répertoire de projet
sys.path
sans tenir compte de la variable env.Pour quelqu'un qui utilise VSCode, voici une solution en une ligne pour vous s'il existe un répertoire de base de votre projet:
Laissez-moi vous expliquer un peu:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: trouver le répertoire de base en fonction du fichier d'éditionos.path.join(os.getcwd(), base_dir)
: ajoutercwd
àsys.path
pour répondre à l'environnement de ligne de commandePour info, voici mon .pylintrc:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
la source
J'ai eu ce même problème et je l'ai résolu en installant pylint dans mon virtualenv, puis en ajoutant un fichier .pylintrc à mon répertoire de projet avec ce qui suit dans le fichier:
la source
Peut-être en ajoutant manuellement le répertoire dans le PYTHONPATH?
la source
J'ai eu le même problème et comme je n'ai pas pu trouver de réponse, j'espère que cela pourra aider toute personne ayant un problème similaire.
J'utilise flymake avec epylint. Fondamentalement, j'ai ajouté un hook en mode dired qui vérifie si le répertoire dired est un répertoire de package python. Si c'est le cas, je l'ajoute au PYTHONPATH. Dans mon cas, je considère un répertoire comme un package python s'il contient un fichier nommé "setup.py".
J'espère que cela t'aides.
la source
Si quelqu'un cherche un moyen d'exécuter pylint en tant qu'outil externe dans PyCharm et de le faire fonctionner avec ses environnements virtuels (pourquoi je suis venu à cette question), voici comment je l'ai résolu:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Maintenant, utiliser pylint comme outil externe exécutera pylint sur n'importe quel répertoire que vous avez sélectionné en utilisant un fichier de configuration commun et utilisera n'importe quel interpréteur configuré pour votre projet (qui est probablement votre interpréteur virtualenv).
la source
Ceci est une vieille question mais n'a pas de réponse acceptée, donc je suggère ceci: changez l'instruction d'importation dans two.py pour lire:
Dans mon environnement actuel (Python 3.6, VSCode utilisant pylint 2.3.1), cela efface l'instruction marquée.
la source
J'ai trouvé une bonne réponse . Modifiez votre pylintrc et ajoutez ce qui suit dans master
la source
Lorsque vous installez Python, vous pouvez configurer le chemin. Si le chemin est déjà défini, ce que vous pouvez faire est dans VS Code, appuyez sur Ctrl + Maj + P et tapez Python: Sélectionnez Interpreter et sélectionnez la version mise à jour de Python. Suivez ce lien pour plus d'informations, https://code.visualstudio.com/docs/python/environments
la source
si vous utilisez vscode, assurez-vous que votre répertoire de package est en dehors du répertoire _pychache__.
la source
Si vous utilisez Cython sous Linux, j'ai résolu la suppression de
module.cpython-XXm-X-linux-gnu.so
fichiers dans le répertoire cible de mon projet.la source
ajoutez simplement ce code dans le fichier .vscode / settings.json
, "python.linting.pylintPath": "venv / bin / pylint"
Cela notifiera l'emplacement de pylint (qui est un vérificateur d'erreurs pour python)
la source
Bonjour, j'ai pu importer les packages à partir de différents répertoires. Je viens de faire ce qui suit: Remarque: j'utilise VScode
Étapes pour créer un package Python Travailler avec des packages Python est vraiment simple. Tout ce que vous devez faire est:
Créez un répertoire et donnez-lui le nom de votre package. Mettez vos cours dedans. Créez un fichier init .py dans le répertoire
Par exemple: vous avez un dossier appelé Framework dans lequel vous conservez toutes les classes personnalisées et votre travail consiste simplement à créer un fichier init .py dans le dossier nommé Framework.
Et lors de l'importation, vous devez importer de cette manière --->
depuis la base d'importation du Framework
donc l'erreur E0401 disparaît. Framework est le dossier dans lequel vous venez de créer init .py et base est votre module personnalisé dans lequel vous devez importer et travailler dessus J'espère que ça aide !!!!
la source