Ich führe PyLint in Wing IDE unter Windows aus. Ich habe ein Unterverzeichnis (Paket) in meinem Projekt und innerhalb des Pakets importiere ich ein Modul von der obersten Ebene, dh.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Im Inneren habe two.py
ich import one
und dies funktioniert gut zur Laufzeit, da sich das Verzeichnis der obersten Ebene (von dem aus ausgeführt myapp.py
wird) im Python-Pfad befindet. Wenn ich PyLint jedoch auf two.py ausführe, wird ein Fehler angezeigt:
F0401: Unable to import 'one'
Wie behebe ich das?
~/.pylintrc
arbeitete für mich unter OSX, der andere funktionierte nichtexport PYTHONPATH
tun müssen, damit siepylint
es sehen (zumindest in bash / zsh)Die Lösung zum Ändern des Pfads
init-hook
ist gut, aber ich mag die Tatsache nicht, dass ich dort einen absoluten Pfad hinzufügen musste, da ich diese pylintrc-Datei nicht für die Entwickler des Projekts freigeben kann. Diese Lösung mit dem relativen Pfad zur pylintrc-Datei funktioniert für mich besser:Beachten Sie, dass
pylint.config.PYLINTRC
auch vorhanden ist und den gleichen Wert wie hatfind_pylintrc()
.quelle
.
(Punkt) beginnt .app
) hinzufügen möchten, können Sie verwendenfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path ist eine Liste.
2) Das Problem ist manchmal, dass der sys.path nicht Ihr virtualenv.path ist und Sie pylint in Ihrem virtualenv verwenden möchten
3) Verwenden Sie wie gesagt init-hook (achten Sie auf 'und "die Analyse von Pylint ist streng)
oder
.. und
quelle
pylint
ich es gemäß diesem Rat in meine virtuelle Umgebung installierte : plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
in Ihrem Home-Ordner tun .Das Problem kann gelöst werden, indem der Pylint-Pfad unter venv: $ cat .vscode / settings.json konfiguriert wird
quelle
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
nur der Vollständigkeit halber.The setting "python.pythonPath" defined in your settings.json is now deprecated.
Wenn ich diepython.pythonPath
Zeile lösche, scheint sie trotzdem zu funktionieren.Haben Sie eine leere
__init__.py
Datei in beiden Verzeichnissen, um Python wissen zu lassen, dass die Verzeichnisse Module sind?Die grundlegende Gliederung, wenn Sie nicht aus dem Ordner heraus ausgeführt werden (dh möglicherweise von Pylint, obwohl ich das nicht verwendet habe), lautet:
Dies ist , wie das Python - Interpreter kennt das Modul ohne Bezug auf das aktuelle Verzeichnis, so dass , wenn Pylint aus seinem eigenen absoluten Pfad ausgeführt wird , um den Zugang der Lage sein ,
functions_etc.py
wietopdir.functions_etc
odertopdir.subdir.other_functions
, soferntopdir
auf die istPYTHONPATH
.UPDATE: Wenn das Problem nicht die
__init__.py
Datei ist, versuchen Sie vielleicht einfach, Ihr Modul zu kopieren oder zu verschiebenc:\Python26\Lib\site-packages
- dies ist ein üblicher Ort, um zusätzliche Pakete zu platzieren, und befindet sich definitiv auf Ihrem Pythonpfad. Wenn Sie wissen, wie man symbolische Windows-Links oder ähnliches erstellt (ich nicht!), Können Sie dies stattdessen tun. Hier gibt es viele weitere Optionen : http://docs.python.org/install/index.html , einschließlich der Option, sys.path an das Verzeichnis auf Benutzerebene Ihres Entwicklungscodes anzuhängen, aber in der Praxis verlinke ich normalerweise nur symbolisch Mein lokales Entwicklungsverzeichnis für Site-Pakete - das Kopieren hat den gleichen Effekt.quelle
__init__.py
in beiden Verzeichnissen. Ich denke, das Problem ist, dass das oberste Verzeichnis NICHT in PYTHONPATH ist, wenn PyLint ausgeführt wird, und ich bin nicht sicher, wie ich das beheben soll.Allgemeine Antwort auf diese Frage, die ich auf dieser Seite gefunden habe BITTE NICHT GEÖFFNET, WEBSITE IST BUGED
erstellen
.pylintrc
und hinzufügenquelle
Ich weiß nicht, wie es mit WingIDE funktioniert, aber für die Verwendung von PyLint mit Geany habe ich meinen externen Befehl auf Folgendes gesetzt:
Dabei ist% f der Dateiname und% d der Pfad. Könnte für jemanden nützlich sein :)
quelle
Ich musste die Systemvariable aktualisieren
PYTHONPATH
, um meinen App Engine-Pfad hinzuzufügen. In meinem Fall musste ich nur meine~/.bashrc
Datei bearbeiten und die folgende Zeile hinzufügen:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
Tatsächlich habe ich versucht, das
init-hook
erste festzulegen, aber dies hat das Problem in meiner Codebasis nicht konsistent behoben (nicht sicher warum). Nachdem ich es dem Systempfad hinzugefügt hatte (wahrscheinlich eine gute Idee im Allgemeinen), verschwanden meine Probleme.quelle
Eine Problemumgehung, die ich gerade erst entdeckt habe, besteht darin, PyLint nur für das gesamte Paket und nicht für eine einzelne Datei auszuführen. Irgendwie gelingt es dann, importierte Module zu finden.
quelle
pylint ... dir
Aus übergeordnetem Ordner ausführen . Dies muss__init__.py
in jedem Unterordner mit.py
Dateien vorhanden sein.VersuchenBeachten Sie, dass in Python 3 die Syntax für den Teil in der
else
Klausel lautetBeim zweiten Gedanken wird dies wahrscheinlich Ihr spezifisches Problem nicht beheben. Ich habe die Frage falsch verstanden und dachte, dass two.py als Hauptmodul ausgeführt wird, aber das ist nicht der Fall. Und angesichts der Unterschiede in der Art und Weise, wie Python 2.6 (ohne Import
absolute_import
von__future__
) und Python 3.x Importe handhaben, müssten Sie dies für Python 2.6 sowieso nicht tun, glaube ich nicht.Wenn Sie jedoch irgendwann zu Python 3 wechseln und ein Modul sowohl als Paketmodul als auch als eigenständiges Skript im Paket verwenden möchten, ist es möglicherweise eine gute Idee, so etwas wie beizubehalten
im Kopf.
EDIT: Und jetzt zu einer möglichen Lösung für Ihr eigentliches Problem. Führen Sie PyLint entweder in dem Verzeichnis aus, in dem sich Ihr
one
Modul befindet (möglicherweise über die Befehlszeile), oder geben Sie beim Ausführen von PyLint den folgenden Code ein:Als Alternative zum Spielen mit PYTHONPATH stellen Sie einfach sicher, dass das aktuelle Arbeitsverzeichnis das Verzeichnis ist, das es enthält
one.py
Sie beim Importieren enthalten.(Wenn Sie sich Brians Antwort ansehen, könnten Sie wahrscheinlich den vorherigen Code zuweisen
init_hook
, aber wenn Sie das tun, können Sie einfach das Anhängen ansys.path
das tun, was er tut, was etwas eleganter ist als meine Lösung.)quelle
Der Schlüssel besteht darin, Ihr Projektverzeichnis hinzuzufügen,
sys.path
ohne die env-Variable zu berücksichtigen.Für jemanden, der VSCode verwendet, ist hier eine einzeilige Lösung für Sie, wenn es ein Basisverzeichnis Ihres Projekts gibt:
Lassen Sie es mich ein wenig erklären:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: Basisverzeichnis entsprechend der Bearbeitungsdatei suchenos.path.join(os.getcwd(), base_dir)
: Hinzufügencwd
zusys.path
, um die Befehlszeilenumgebung zu erfüllenZu Ihrer Information, hier ist meine .pylintrc:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
quelle
Ich hatte das gleiche Problem und habe es behoben, indem ich pylint in meiner virtuellen Umgebung installiert und dann eine .pylintrc-Datei zu meinem Projektverzeichnis hinzugefügt habe, die Folgendes in der Datei enthält:
quelle
Vielleicht durch manuelles Anhängen des Verzeichnisses im PYTHONPATH?
quelle
Ich hatte das gleiche Problem und da ich keine Antwort finden konnte, hoffe ich, dass dies jedem mit einem ähnlichen Problem helfen kann.
Ich benutze Flymake mit Epylint. Grundsätzlich habe ich einen Dired-Mode-Hook hinzugefügt, der prüft, ob das Dired-Verzeichnis ein Python-Paketverzeichnis ist. Wenn ja, füge ich es dem PYTHONPATH hinzu. In meinem Fall betrachte ich ein Verzeichnis als Python-Paket, wenn es eine Datei mit dem Namen "setup.py" enthält.
Hoffe das hilft.
quelle
Falls jemand nach einer Möglichkeit sucht, Pylint als externes Tool in PyCharm auszuführen und es mit seinen virtuellen Umgebungen arbeiten zu lassen (warum ich auf diese Frage gekommen bin), habe ich es folgendermaßen gelöst:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Wenn Sie jetzt pylint als externes Tool verwenden, wird pylint in einem beliebigen Verzeichnis ausgeführt, das Sie mithilfe einer gemeinsamen Konfigurationsdatei ausgewählt haben, und es wird ein beliebiger Interpreter verwendet, der für Ihr Projekt konfiguriert ist (vermutlich Ihr virtueller Env-Interpreter).
quelle
Dies ist eine alte Frage, die jedoch nicht akzeptiert wurde. Daher schlage ich Folgendes vor: Ändern Sie die Importanweisung in two.py, um Folgendes zu lesen:
In meiner aktuellen Umgebung (Python 3.6, VSCode mit Pylint 2.3.1) wird die markierte Anweisung gelöscht.
quelle
Ich habe eine schöne Antwort gefunden . Bearbeiten Sie Ihren Pylintrc und fügen Sie im Master Folgendes hinzu
quelle
Wenn Sie Python installieren, können Sie den Pfad einrichten. Wenn der Pfad bereits definiert ist, können Sie ihn innerhalb von VS Code ausführen. Drücken Sie Strg + Umschalt + P und geben Sie Python ein: Wählen Sie Interpreter und wählen Sie die aktualisierte Version von Python aus. Folgen Sie diesem Link für weitere Informationen unter https://code.visualstudio.com/docs/python/environments
quelle
Wenn Sie vscode verwenden, stellen Sie sicher, dass sich Ihr Paketverzeichnis außerhalb des Verzeichnisses _pychache__ befindet.
quelle
Wenn Sie Cython unter Linux verwenden, habe ich das Entfernen von
module.cpython-XXm-X-linux-gnu.so
Dateien in meinem Projektzielverzeichnis behoben .quelle
Fügen Sie diesen Code einfach in die Datei .vscode / settings.json ein
, "python.linting.pylintPath": "venv / bin / pylint"
Dadurch wird der Speicherort von pylint benachrichtigt (dies ist eine Fehlerprüfung für Python).
quelle
Hallo, ich konnte die Pakete aus einem anderen Verzeichnis importieren. Ich habe gerade Folgendes getan: Hinweis: Ich verwende VScode
Schritte zum Erstellen eines Python-Pakets Die Arbeit mit Python-Paketen ist sehr einfach. Alles was Sie tun müssen ist:
Erstellen Sie ein Verzeichnis und geben Sie den Namen Ihres Pakets an. Setzen Sie Ihre Klassen ein. Erstellen Sie eine Init .py-Datei im Verzeichnis
Beispiel: Sie haben einen Ordner namens Framework, in dem Sie alle benutzerdefinierten Klassen behalten, und Ihre Aufgabe besteht darin, nur eine Init zu erstellen .py-Datei im Ordner Framework .
Und während des Imports müssen Sie auf diese Weise importieren --->
von der Framework-Importbasis
Der E0401-Fehler verschwindet also. Framework ist der Ordner, in dem Sie gerade init .py erstellt haben, und base ist Ihr benutzerdefiniertes Modul, in das Sie importieren und daran arbeiten müssen. Hoffe, es hilft !!!!
quelle