Ich habe
find . -iname "*.py" -exec pylint -E {} ;\
und
FILES=$(find . -iname "*.py")
pylint -E $FILES
Wenn ich es richtig verstanden habe, führt der erste Befehl pylint für jede der Python-Dateien aus, der zweite Befehl führt einmal für alle Dateien pylint aus. Ich hatte erwartet, dass beide Befehle dieselbe Ausgabe zurückgeben würden, aber unterschiedliche Ergebnisse. Ich denke, dass dieser Unterschied irgendwie mit Importen und Pylint-Meldungen (Fehler) zusammenhängt, die auftreten, wenn ein Import fehlschlägt und nicht von pylint -E ausgegeben wird.
Hat jemand das schon erlebt und könnte erklären, warum der Unterschied passiert und wie läuft Pylint am besten?
Mein ein Cent
find . -iname "*.py" | xargs pylint
Wie funktioniert es?
find
findet alle Dateien, endet mit py
und wird an xargs
übergeben. xargs
führt den Befehl pylint
für jede Datei aus.
HINWEIS: Sie können auch ein beliebiges Argument für den Befehl pylint
angeben.
BEARBEITEN:
Nach doc können wir verwenden
[1] pylint mymodule.py
[2] Pylint-Verzeichnis/mymodule.py
[2] funktioniert, wenn das Verzeichnis ein Python-Paket ist (d. H. Eine __init__.py
-Datei enthält oder ein implizites Namensraum-Paket ist) oder wenn "Verzeichnis" im Python-Pfad enthalten ist.
Übergeben Sie einfach den Verzeichnisnamen an den Befehl pylint. So legen Sie alle Dateien in ./server
ab:
pylint server
Für alle Python-Dateien in einem Verzeichnis können Sie Folgendes ausführen:
pylint *.py
pylint **/*.py
Wenn Sie keine __init__.py
-Datei im Verzeichnis haben und dies aus verschiedenen Gründen nicht möchten, ist dies mein Ansatz
touch __init__.py; pylint <folder-name>; rm __init__.py
Haben Sie versucht, psospector ( https://pypi.org/project/prospector/ ) oder pylint_runner ( https://pypi.org/project/pylint_runner/ )
Es gibt bereits ein Problem hierfür und es wird hoffentlich bald behoben.
Wenn Sie xargs
nicht bevorzugen, können Sie einfach einen einfachen find-exec ausführen:
find . -type f -name "*.py" -exec pylint -j 0 --exit-zero {} \;
Das Problem, das ich mit pylint Project-Dir
Hatte, ist, dass alle absoluten Importe nicht funktionierten.
Wenn Sie pylint für alle Dateien im aktuellen Arbeitsverzeichnis und den Unterordnern ausführen möchten, finden Sie hier eine Problemumgehung. Dieses Skript führt pylint im aktuellen Verzeichnis aus. Wenn __init__.py
nicht vorhanden ist, erstellt es es, führt pylint aus und entfernt es dann.
#! /bin/bash -
if [[ ! -e __init__.py ]]; then
touch __init__.py
pylint `pwd`
rm __init__.py
else
pylint `pwd`
fi
Wenn Sie Ihre benutzerdefinierte Konfigurationsdatei ausführen möchten, verwenden Sie den folgenden Befehl
pylint --rcfile=.pylintrc <directory_name>
touch __init__.py
Im aktuellen Verzeichnistouch __init__.py
In jedem Unterverzeichnis, das Sie als Pylint betrachten möchtenpylint $(pwd)
(oder gleichwertig pylint /absolute/path/to/current/directory
)