Estoy ejecutando PyLint desde dentro de 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
Dentro two.py
tengo import one
y esto funciona bien en tiempo de ejecución, porque el directorio de nivel superior (desde el que 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?
~/.pylintrc
trabajó para mí en OSX, el otro no funcionóexport PYTHONPATH
quepylint
lo vea (al menos, en bash / zsh)La solución para alterar 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 usa la ruta relativa al archivo pylintrc funciona mejor para mí:Tenga en cuenta que
pylint.config.PYLINTRC
también existe y tiene el mismo valor quefind_pylintrc()
.fuente
.
(punto).app
) que puede usarfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path es una lista.
2) El problema es que a veces sys.path no es tu virtualenv.path y quieres usar pylint en tu virtualenv
3) Entonces, como se dijo, use init-hook (preste atención en 'y "el análisis de pylint es estricto)
o
.. y
fuente
pylint
en mi virtualenv según este consejo: plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
en su carpeta de inicio.El problema se puede resolver configurando la ruta de pylint en venv: $ cat .vscode / settings.json
fuente
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
solo para completar.The setting "python.pythonPath" defined in your settings.json is now deprecated.
aunque elimine lapython.pythonPath
línea, aún parece funcionar.¿Tiene un
__init__.py
archivo vacío en ambos directorios para que Python sepa que los directorios son módulos?El esquema básico cuando no está ejecutando desde la carpeta (es decir, tal vez desde pylint, aunque no lo he usado) es:
Así es como el intérprete de Python conoce el módulo sin referencia al directorio actual, por lo que si pylint se ejecuta desde su propia ruta absoluta, podrá acceder
functions_etc.py
comotopdir.functions_etc
otopdir.subdir.other_functions
, siempre quetopdir
esté en elPYTHONPATH
.ACTUALIZACIÓN: Si el problema no es el
__init__.py
archivo, tal vez solo intente copiar o mover su móduloc:\Python26\Lib\site-packages
; ese es un lugar común para colocar paquetes adicionales, y definitivamente estará en su pythonpath. Si sabe cómo hacer enlaces simbólicos de Windows o su equivalente (¡no lo hago!), Podría hacerlo en su lugar. Aquí hay muchas más opciones : http://docs.python.org/install/index.html , incluida la opción de agregar sys.path con el directorio de nivel de usuario de su código de desarrollo, pero en la práctica generalmente solo enlace simbólicamente mi directorio de desarrollo local para paquetes de sitio: copiarlo tiene el mismo efecto.fuente
__init__.py
en ambos directorios. Creo que el problema es que el directorio superior NO está en PYTHONPATH cuando se ejecuta PyLint y no estoy seguro de cómo solucionarlo.respuesta general a esta pregunta que encontré en esta página POR FAVOR NO ABIERTA, EL SITIO ESTÁ ERROR
crear
.pylintrc
y agregarfuente
No sé cómo funciona con WingIDE, pero para usar PyLint con Geany, configuro mi comando externo para:
donde% f es el nombre del archivo y% d es la ruta. Puede ser útil para alguien :)
fuente
Tuve que actualizar la
PYTHONPATH
variable del sistema para agregar mi ruta de App Engine. En mi caso, solo tuve que editar mi~/.bashrc
archivo y agregar la siguiente línea:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
De hecho, intenté configurar el
init-hook
primero, pero esto no resolvió el problema de manera consistente en mi base de código (no estoy seguro de por qué). Una vez que lo agregué a la ruta del sistema (probablemente una buena idea en general), mis problemas desaparecieron.fuente
Una solución que acabo de descubrir es ejecutar PyLint para todo el paquete, en lugar de un solo archivo. De alguna manera, logra encontrar el módulo importado entonces.
fuente
pylint ... dir
desde la carpeta principal. Esto requiere__init__.py
estar presente en cada subcarpeta con.py
archivos.TratarTenga en cuenta que en Python 3, la sintaxis de la parte en la
else
cláusula seríaPensándolo bien, esto probablemente no solucionará su problema específico. No entendí la pregunta y pensé que two.py se estaba ejecutando como el módulo principal, pero ese no es el caso. Y teniendo en cuenta las diferencias en la forma en que Python 2.6 (sin importar
absolute_import
desde__future__
) y Python 3.x manejan las importaciones, de todos modos no necesitaría hacer esto para Python 2.6, no creo.Aún así, si finalmente cambia a Python 3 y planea usar un módulo como módulo de paquete y como un script independiente dentro del paquete, puede ser una buena idea mantener algo como
en mente.
EDITAR: Y ahora para una posible solución a su problema real. Ejecute PyLint desde el directorio que contiene su
one
módulo (quizás a través de la línea de comando) o coloque el siguiente código en algún lugar cuando ejecute PyLint:Básicamente, como alternativa a jugar con PYTHONPATH, solo asegúrese de que el directorio de trabajo actual sea el directorio que contiene
one.py
cuando realiza la importación.(Mirando la respuesta de Brian, probablemente podrías asignarle el código anterior
init_hook
, pero si vas a hacer eso, entonces simplemente puedes agregar losys.path
que él hace, que es un poco más elegante que mi solución).fuente
La clave es agregar el directorio de su proyecto
sys.path
sin tener en cuenta la variable env.Para alguien que usa VSCode, aquí hay una solución de una línea para usted si hay un directorio base de su proyecto:
Déjame explicarte un poco:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: encuentra el directorio base de acuerdo con el archivo de ediciónos.path.join(os.getcwd(), base_dir)
: agregarcwd
parasys.path
cumplir con el entorno de línea de comandosFYI, aquí está mi .pylintrc:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
fuente
Tuve este mismo problema y lo solucioné instalando pylint en mi virtualenv y luego agregando un archivo .pylintrc a mi directorio de proyecto con lo siguiente en el archivo:
fuente
¿Tal vez agregando manualmente el directorio dentro de PYTHONPATH?
fuente
Tuve el mismo problema y, dado que no pude encontrar una respuesta, espero que esto pueda ayudar a cualquier persona con un problema similar.
Yo uso flymake con epylint. Básicamente, lo que hice fue agregar un dired-mode-hook que verifica si el directorio dired es un directorio de paquete de Python. Si es así, lo agrego a PYTHONPATH. En mi caso, considero que un directorio es un paquete de Python si contiene un archivo llamado "setup.py".
Espero que esto ayude.
fuente
En caso de que alguien esté buscando una manera de ejecutar pylint como herramienta externa en PyCharm y hacer que funcione con sus entornos virtuales (por qué llegué a esta pregunta), así es como lo resolví:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Ahora, usar pylint como herramienta externa ejecutará pylint en cualquier directorio que haya seleccionado usando un archivo de configuración común y usará cualquier intérprete configurado para su proyecto (que presumiblemente es su intérprete virtualenv).
fuente
Esta es una pregunta antigua pero no tiene respuesta aceptada, por lo que sugeriré esto: cambie la declaración de importación en two.py para leer:
En mi entorno actual (Python 3.6, VSCode usando pylint 2.3.1) esto borra la declaración marcada.
fuente
Encontré una buena respuesta . Edite su pylintrc y agregue lo siguiente en master
fuente
Cuando instala Python, puede configurar la ruta. Si la ruta ya está definida, entonces lo que puede hacer es dentro del Código VS, presione Ctrl + Shift + P y escriba Python: Seleccione Intérprete y seleccione la versión actualizada de Python. Siga este enlace para obtener más información, https://code.visualstudio.com/docs/python/environments
fuente
si usa vscode, asegúrese de que el directorio de su paquete esté fuera del directorio _pychache__.
fuente
Si está utilizando Cython en Linux, resolví eliminar
module.cpython-XXm-X-linux-gnu.so
archivos en el directorio de destino de mi proyecto.fuente
simplemente agregue este código en el archivo .vscode / settings.json
, "python.linting.pylintPath": "venv / bin / pylint"
Esto notificará la ubicación de pylint (que es un verificador de errores para python)
fuente
Hola, pude importar los paquetes desde un directorio diferente. Acabo de hacer lo siguiente: Nota: estoy usando VScode
Pasos para crear un paquete de Python Trabajar con paquetes de Python es realmente simple. Todo lo que necesitas hacer es:
Crea un directorio y dale el nombre de tu paquete. Pon tus clases en ello. Cree un archivo init .py en el directorio
Por ejemplo: tiene una carpeta llamada Framework donde guarda todas las clases personalizadas allí y su trabajo es simplemente crear un archivo init .py dentro de la carpeta llamada Framework.
Y mientras importa, debe importar de esta manera --->
de la base de importación de Framework
así que el error E0401 desaparece. Framework es la carpeta donde acaba de crear init .py y la base es su módulo personalizado que debe importar y trabajar en Hope. ¡¡¡Ayuda !!!
fuente