Sé que hay herramientas que validan si su código Python es compatible con PEP8, por ejemplo, hay un servicio en línea y un módulo Python .
Sin embargo, no puedo encontrar un servicio o módulo que pueda convertir mi archivo Python en un archivo Python válido PEP8 autónomo. ¿Alguien sabe si hay alguno?
Supongo que es factible ya que PEP8 tiene que ver con la apariencia del código, ¿verdad?
python
coding-style
pep8
Chen Xie
fuente
fuente
Respuestas:
Desafortunadamente, "pep8 storming" (todo el proyecto) tiene varios efectos secundarios negativos:
Como alternativa (y gracias a @yp por la idea ), escribí un pequeño paquete que autopep8s solo aquellas líneas en las que has estado trabajando desde la última confirmación / rama:
Básicamente, dejar el proyecto un poco mejor de lo que lo encontró :
Suponga que ha terminado su trabajo
master
y está listo para comprometerse:O para limpiar las nuevas líneas que ha comprometido desde la última confirmación:
Básicamente,
pep8radius
se aplica autopep8 a las líneas en la salida de git / hg diff (de la última confirmación compartida ).Este script actualmente funciona con git y hg, si está usando otra cosa y quiere que esto funcione, por favor publique un comentario / problema / PR .
fuente
¡Puedes usar autopep8 ! Mientras se prepara una taza de café, esta herramienta elimina felizmente todas esas molestas violaciones de PEP8 que no cambian el significado del código.
Instálelo a través de pip:
Aplicar esto a un archivo específico:
o para su proyecto (recursivamente), la opción detallada le da algunos comentarios de cómo va :
Nota: A veces, el valor predeterminado de 100 pasadas no es suficiente, lo configuro en 2000 ya que es razonablemente alto y capturará todos los archivos menos los más problemáticos (deja de pasar una vez que no encuentra infracciones pep8 resolubles) ...
En este punto, sugiero volver a probar y hacer un compromiso.
Si desea un cumplimiento "total" de PEP8: una táctica que he usado es ejecutar autopep8 como se indicó anteriormente, luego ejecute PEP8, que imprime las infracciones restantes (archivo, número de línea y qué):
y cámbielos manualmente individualmente (por ejemplo, E712s - comparación con booleanos).
Nota: autopep8 ofrece un
--aggressive
argumento (para "arreglar" despiadadamente estas violaciones que cambian de significado), pero tenga cuidado si usa agresivo, puede que tenga que depurar ... (por ejemplo, en numpy / pandas, ¡True == np.bool_(True)
pero noTrue is np.bool_(True)
!)Puede comprobar cuántas infracciones de cada tipo (antes y después):
Nota: Considero que los E501 (línea demasiado larga) son un caso especial, ya que probablemente habrá muchos de estos en su código y, a veces, autopep8 no los corrige.
Como ejemplo, apliqué esta técnica al código base de pandas .
fuente
pep8
se cambió el nombre del paquete mencionado en esta respuesta apycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1@Andy Hayden dio una buena descripción general de autopep8. Además de eso, hay un paquete más llamado pep8ify que también hace lo mismo.
Sin embargo, ambos paquetes solo pueden eliminar los errores de pelusa, pero no pueden formatear el código.
El código anterior permanece igual después de pep8ificar también. Pero el código aún no se ve bien. Puede utilizar formateadores como yapf , que formatearán el código incluso si el código es compatible con PEP8. El código anterior se formateará para
Algunas veces esto incluso destruye su formateo manual. Por ejemplo
será convertido a
Pero puedes decirle que ignore algunas partes.
Tomado de mi antigua publicación de blog: ¡ PEP8 automáticamente y formatee su código Python!
fuente
little = more[3: 5]
un error en pep8 (la biblioteca)? yapf es definitivamente el futuro aquí, el algoritmo detrás de él (esencialmente una ruta más corta en el gráfico de todas las opciones de formato) es una solución muy elegante y probablemente tendrá menos errores, así como formato canónico.Si está utilizando eclipse + PyDev, simplemente puede activar autopep8 desde la configuración de PyDev: Windows -> Preferencias -> escriba 'autopep8' en el filtro de búsqueda.
Marque la casilla '¿usar autopep8.py para formatear el código?' -> Aceptar
Ahora el formato de código CTRL-SHIFT-F de eclipse debería formatear su código usando autopep8 :)
fuente
Hice una amplia investigación sobre diferentes instrumentos para Python y estilo de código. Hay dos tipos de instrumentos: linters: analizan su código y dan algunas advertencias sobre estilos de código mal usados y muestran consejos sobre cómo solucionarlo, y formateadores de código: cuando guarda su archivo, vuelve a formatear su documento usando el estilo PEP.
Debido a que el reformateo debe ser más preciso (si remorgrasa algo que no quieres que se vuelva inútil) cubren menos parte de PEP, los linters muestran mucho más.
Todos ellos tienen diferentes permisos de configuración, por ejemplo, pylinter configurable en todas sus reglas (puede activar / desactivar todo tipo de advertencias), negro inconfigurable en absoluto.
Aquí hay algunos enlaces útiles y tutoriales:
Documentación:
Linters (en orden de popularidad):
Formateadores de código (en orden de popularidad):
fuente
Hay muchos.
Los IDE suelen tener alguna capacidad de formateo incorporada. IntelliJ Idea / PyCharm sí, lo mismo ocurre con el complemento de Python para Eclipse, y así sucesivamente.
Hay formateadores / linters que pueden apuntar a varios idiomas. https://coala.io es un buen ejemplo de eso.
Luego están las herramientas de propósito único, de las cuales muchas se mencionan en otras respuestas.
Un método específico de reformateo automático es analizar el archivo en el árbol AST (sin dejar comentarios) y luego volcarlo de nuevo al texto (lo que significa que no se conserva nada del formato original). Ejemplo de eso sería https://github.com/python/black .
fuente