Si vous voulez remonter du module/fichier actuel qui a été remis à pylint
à la recherche de la racine du module, c'est ce qu'il faut faire.
[MASTER]
init-hook=sys.path += [os.path.abspath(os.path.join(os.path.sep, *sys.argv[-1].split(os.sep)[:i])) for i, _ in enumerate(sys.argv[-1].split(os.sep)) if os.path.isdir(os.path.abspath(os.path.join(os.path.sep, *sys.argv[-1].split(os.sep)[:i], '.git')))][::-1]
Si vous avez un module python ~/code/mymodule/
avec une structure de répertoire de premier niveau comme suit
~/code/mymodule/
├── .pylintrc
├── mymodule/
│ └── src.py
└── tests/
└── test_src.py
Ensuite, cela ajoutera ~/code/mymodule/
à votre chemin python et permettre à pylint de s'exécuter dans votre IDE, même si vous importez mymodule.src
en tests/test_src.py
.
Vous pouvez remplacer un chèque par un .pylintrc
mais un répertoire git est généralement ce que vous voulez quand il s'agit de la racine d'un module python.
Avant de demander
Les réponses à l'aide de import sys, os; sys.path.append(...)
Il manque quelque chose qui justifie le format de ma réponse. Je n'écris normalement pas de code de cette manière, mais dans ce cas, vous devez faire face aux limitations de l'analyseur et de l'évaluateur de configuration de pylintrc. Il exécute littéralement exec
en le contexte du callback init_hook Ainsi, toute tentative d'importation de pathlib
Les instructions de type "déclaration à plusieurs lignes", "stockage dans des variables", etc. ne fonctionnent pas.
Une forme moins dégoûtante de mon code pourrait ressembler à ceci :
import os
import sys
def look_for_git_dirs(filename):
has_git_dir = []
filename_parts = filename.split(os.sep)
for i, _ in enumerate(filename_parts):
filename_part = os.path.abspath(os.path.join(os.path.sep, *filename_parts[:i]))
if os.path.isdir(os.path.join(filename_part, '.git')):
has_git_dir.append(filename_part)
return has_git_dir[::-1]
# don't use .append() in case there's < 1 or > 1 matches found
sys.path += look_for_git_dirs(sys.argv[-1])
J'aurais aimé pouvoir utiliser pathlib.Path(filename).parents
cela aurait facilité les choses.