Error de PyLint "No se puede importar": ¿cómo configurar PYTHONPATH?
Estoy ejecutando PyLint desde Wing IDE en Windows. Tengo un subdirectorio (paquete) en mi proyecto y dentro del paquete importo un módulo desde el nivel superior, es decir.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
En el interior two.py
lo tengo import one
y esto funciona bien en tiempo de ejecución, porque el directorio de nivel superior (desde donde myapp.py
se ejecuta) está en la ruta de Python. Sin embargo, cuando ejecuto PyLint en two.py me da un error:
F0401: Unable to import 'one'
¿Cómo puedo solucionar esto?
Hay dos opciones que conozco.
Uno, cambie la PYTHONPATH
variable de entorno para incluir el directorio encima de su módulo.
Alternativamente, edite ~/.pylintrc
para incluir el directorio encima de su módulo, así:
[MASTER]
init-hook='import sys; sys.path.append("/path/to/root")'
(O en otra versión de pylint, el init-hook requiere que cambies [General] a [MASTER])
Ambas opciones deberían funcionar.
La solución para modificar la ruta init-hook
es buena, pero no me gusta el hecho de que tuve que agregar una ruta absoluta allí, como resultado no puedo compartir este archivo pylintrc entre los desarrolladores del proyecto. Esta solución que utiliza la ruta relativa al archivo pylintrc funciona mejor para mí:
[MASTER]
init-hook="from pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"
Tenga en cuenta que pylint.config.PYLINTRC
también existe y tiene el mismo valor que find_pylintrc()
.
El problema se puede resolver configurando la ruta de pylint en venv: $ cat .vscode/settings.json
{
"python.pythonPath": "venv/bin/python",
"python.linting.pylintPath": "venv/bin/pylint"
}