autopep8 formatea automáticamente el código Python para ajustarlo a la guía de estilo PEP 8. Utiliza la utilidad pycodestyle para determinar qué partes del código deben formatearse. autopep8 es capaz de solucionar la mayoría de los problemas de formato que puede informar pycodestyle.
Contenido
Instalación
Requisitos
Uso
Características
Uso más avanzado
Deshabilitar línea por línea
Usar como módulo
Configuración
pyproject.toml
Uso con compromiso previo
Pruebas
Solución de problemas
pkg_resources.DistributionNotFound
Campo de golf
De pipa:
instalación de $ pip --actualizar autopep8
Considere usar la opción --user
.
autopep8 requiere pycodestyle.
Para modificar un archivo en su lugar (con nivel agresivo 2):
$ autopep8 --in-place --aggressive --aggressive
Antes de ejecutar autopep8.
import math, sys;def example1():####Este es un comentario largo. Esto debe ajustarse para que quepa en 72 caracteres.some_tuple=( 1,2, 3,'a' );some_variable={'long':'Las líneas de código largas deben ajustarse en 79 caracteres.','other':[math .pi, 100,200,300,9876543210,'Esta es una cadena larga que continúa'],'more':{'inner':'Toda esta línea lógica debe estar envuelto.',some_tuple:[1,20,300,40000,500000000,600000000000000000]}}return (some_tuple, some_variable)def ejemplo2(): return {'has_key() está en desuso':True}.has_key({'f ':2}.has_key(''));clase Ejemplo3 (objeto): def __init__ (self, bar): #Comments debe tener un espacio después del hash. si barra: barra+=1; barra=barra* barra ; barra de retorno else:some_string = """ No se debe modificar la sangría en cadenas multilínea. Sólo se debe volver a sangrar el código real."""return (sys.path, some_string)
Después de ejecutar autopep8.
import mathimport sysdef example1():# Este es un comentario largo. Esto debe ajustarse para que quepa en 72# caracteres.some_tuple = (1, 2, 3, 'a')some_variable = {'long': 'Las líneas de código largas deben incluirse en 79 caracteres.','other': [matemáticas .pi,100,200,300,9876543210,'Esta es una cadena larga que continúa'],'more': {'inner': 'Toda esta línea lógica debería ser envuelto.',some_tuple: [1,20,300,40000,500000000,60000000000000000]}}return (some_tuple, some_variable)def ejemplo2(): return ('' in {'f': 2}) in {'has_key() está en desuso': Verdadero}clase Ejemplo3(objeto):def __init__(self, bar):# Los comentarios deben tener un espacio después del hash.if bar:bar += 1bar = bar * barreturn barelse:some_string = """ No se debe tocar la sangría en cadenas de varias líneas. Solo se debe volver a sangrar el código real ."""retorno (sys.path, alguna_cadena)
Opciones:
uso: autopep8 [-h] [--versión] [-v] [-d] [-i] [--global-config nombre de archivo] [--ignore-local-config] [-r] [-j n] [-p n] [-a] [--experimental] [--excluir globos] [--list-fixes] [--ignorar errores] [--seleccionar errores] [--max-line-length n] [--line-range línea línea] [--hang-closing] [--exit-code] [archivos [archivos...]] Formatea automáticamente el código Python para que se ajuste a la guía de estilo PEP 8. argumentos posicionales: archivos archivos para formatear o '-' para estándar en argumentos opcionales: -h, --help muestra este mensaje de ayuda y sale --version muestra el número de versión del programa y sale -v, --verbose imprime mensajes detallados; múltiples -v dan como resultado más mensajes detallados -d, --diff imprime la diferencia para la fuente fija -i, --in-place realiza cambios en los archivos existentes --global-config nombre de archivo ruta a un archivo de configuración global de pep8; si este archivo lo hace no existe entonces esto se ignora (predeterminado: ~/.config/pep8) --ignore-local-config no busque ni aplique archivos de configuración locales; si no pasado, los valores predeterminados se actualizan con cualquier archivo de configuración en el directorio raíz del proyecto -r, --recursive ejecuta recursivamente sobre directorios; debe usarse con --in-place o --diff -j n, --jobs n número de trabajos paralelos; coincidir con el recuento de CPU si el valor es menos de 1 -p n, --pep8-pasa n número máximo de pases pep8 adicionales (predeterminado: infinito) -a, --agressive habilita cambios sin espacios en blanco; múltiple -un resultado en cambios más agresivos --experimental habilita correcciones experimentales --exclude globs excluye los nombres de archivos/directorios que coincidan con estas comas. globos separados --list-fixes lista códigos para correcciones; utilizado por --ignore y --select --ignorar errores no corrige estos errores/advertencias (predeterminado: E226,E24,W50,W690) --los errores seleccionados corrigen sólo estos errores/advertencias (por ejemplo, E4,W) --max-line-length n establece la longitud máxima de línea permitida (predeterminado: 79) --line-line línea línea, --line línea línea solo corrija los errores encontrados dentro de este rango inclusivo de números de línea (por ejemplo, 1 99); Los números de línea están indexados en 1 --hang-closing opción de cierre colgado pasada a pycodestyle --exit-code cambia el comportamiento del código de salida. comportamiento predeterminado de valor de retorno, 0 es sin diferencias, 1 es salida de error. Devuelve 2 cuando agrega esta opción. 2 existe diferencias.
autopep8 soluciona los siguientes problemas informados por pycodestyle:
E101: reindentar todas las líneas. E11 - Corregir sangría. E121: se corrigió la sangría para que sea múltiplo de cuatro. E122: agregue sangría ausente para sangría francesa. E123 - Alinee el soporte de cierre para que coincida con el soporte de apertura. E124: alinee el soporte de cierre para que coincida con la sangría visual. E125: sangría para distinguir la línea de la siguiente línea lógica. E126: se corrigió la sangría colgante excesiva. E127: corrige la sangría visual. E128: corrige la sangría visual. E129: corrige la sangría visual. E131: se corrigió la sangría francesa para la línea de continuación no alineada. E133 - Se corrigió la muesca faltante para el soporte de cierre. E20: eliminar espacios en blanco superfluos. E211: eliminar espacios en blanco superfluos. E22: corrige espacios en blanco extraños alrededor de las palabras clave. E224: Elimina espacios en blanco superfluos alrededor del operador. E225: se corrigió el espacio en blanco que faltaba alrededor del operador. E226: se corrigió el espacio en blanco que faltaba alrededor del operador aritmético. E227: se corrigió el espacio en blanco que faltaba alrededor del operador bit a bit/shift. E228: se corrigió el espacio en blanco que faltaba alrededor del operador de módulo. E231: se agregan espacios en blanco faltantes. E241: corrige espacios en blanco extraños alrededor de las palabras clave. E242: eliminar espacios en blanco superfluos alrededor del operador. E251: Elimine los espacios en blanco alrededor del signo '=' del parámetro. E252: Faltan espacios en blanco alrededor del parámetro igual. E26: se corrigió el espaciado después del hash de comentario para comentarios en línea. E265: se corrigió el espaciado después del hash de comentario para los comentarios de bloque. E266: se corrigieron demasiados '#' iniciales para los comentarios de bloque. E27: corrige espacios en blanco extraños alrededor de las palabras clave. E301: se agrega la línea en blanco que falta. E302: agregue las 2 líneas en blanco que faltan. E303: eliminar líneas en blanco adicionales. E304: elimina la línea en blanco que sigue al decorador de funciones. E305: se esperan 2 líneas en blanco después del final de la función o clase. E306: se esperaba 1 línea en blanco antes de una definición anidada. E401 - Poner las importaciones en líneas separadas. E402: se corrigió la importación a nivel de módulo que no estaba en la parte superior del archivo E501: intente hacer que las líneas encajen dentro de los caracteres --max-line-length. E502: eliminar escapes extraños de nueva línea. E701: coloque la declaración compuesta separada por dos puntos en líneas separadas. E70 - Colocar sentencias compuestas separadas por punto y coma en líneas separadas. E711 - Se corrigió la comparación con Ninguno. E712 - Se corrigió la comparación con booleano. E713: utilice 'no en' para probar la membresía. E714: utilice la prueba "no es" para la identidad del objeto. E721: utilice "isinstance()" en lugar de comparar tipos directamente. E722 - Arreglado desnudo excepto. E731: utilice una definición cuando no asigne una expresión lambda. W291: eliminar los espacios en blanco finales. W292: agrega una nueva línea al final del archivo. W293: Elimina los espacios en blanco al final de una línea en blanco. W391: eliminar las líneas en blanco finales. W503: se corrigió el salto de línea antes del operador binario. W504: se corrigió el salto de línea después del operador binario. W605: se corrigió la secuencia de escape 'x' no válida.
autopep8 también soluciona algunos problemas que pycodestyle no encuentra.
Normalice archivos con finales de línea mixtos.
Coloque una línea en blanco entre una cadena de documentación de clase y su primera declaración de método. (Habilitado con E301
).
Elimine las líneas en blanco entre la declaración de una función y su cadena de documentación. (Habilitado con E303
).
autopep8 evita solucionar algunos problemas encontrados por pycodestyle.
E112
/ E113
para no comentarios son informes de sangría incorrecta que infringe las reglas de sintaxis. Estos no deben modificarse en absoluto.
E265
, que hace referencia al espacio después del hash del comentario, se ignora si el comentario parece código. autopep8 evita modificar estos ya que no son comentarios reales. Si realmente desea deshacerse de la advertencia de pycodestyle, considere simplemente eliminar el código comentado. (Esto se puede automatizar mediante erradicar).
Por defecto, autopep8 solo realiza cambios en los espacios en blanco. Por lo tanto, de forma predeterminada, no repara E711
y E712
. (Cambiar x == None
a x is None
puede cambiar el significado del programa si x
tiene su método __eq__
anulado). Tampoco corrige el código obsoleto W6
. Para habilitar estas correcciones más agresivas, use la opción --aggressive
:
$ autopep8 --agresivo
Utilice múltiples --aggressive
para aumentar el nivel de agresividad. Por ejemplo, E712
requiere un nivel de agresividad 2 (ya que x == True
podría cambiarse a x
o x is True
, pero autopep8 elige lo primero).
--aggressive
también acortará las líneas de manera más agresiva. También eliminará los espacios en blanco finales de forma más agresiva. (Por lo general, no tocamos los espacios en blanco finales en las cadenas de documentos y otras cadenas de varias líneas. Y para realizar cambios aún más agresivos en las cadenas de documentos, use docformatter).
Para habilitar solo un subconjunto de las correcciones, use la opción --select
. Por ejemplo, para solucionar varios tipos de problemas de sangría:
$ autopep8 --select=E1,W1
Si el archivo que se está reparando es grande, es posible que desee habilitar mensajes de progreso detallados:
$ autopep8 -v
Pasar --experimental
habilita la siguiente funcionalidad:
Acorta las líneas de código teniendo en cuenta su longitud.
$ autopep8 --experimental
Es posible desactivar autopep8 hasta que se vuelva a activar en el archivo, usando autopep8: off
y luego volviéndolo a activar con autopep8: on
.
# autopep8: apagado[ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ]# autopep8: activado
fmt: off
y fmt: on
también son válidos.
La forma más sencilla de utilizar autopep8 como módulo es mediante la función fix_code()
:
>>> importar autopep8 >>> autopep8.fix_code('x= 123n') 'x = 123n'
O con opciones:
>>> importar autopep8 >>> autopep8.fix_code('imprimir( 123 )n', ... opciones={'ignorar': ['E']}) 'imprimir(123)n'
De forma predeterminada, si existe $HOME/.config/pycodestyle
( ~.pycodestyle
en el entorno Windows), se utilizará como archivo de configuración global. Alternativamente, puede especificar el archivo de configuración global con la opción --global-config
.
Además, si existen archivos setup.cfg
, tox.ini
, .pep8
y .flake8
en el directorio donde existe el archivo de destino, se utilizará como archivo de configuración.
pep8
, pycodestyle
y flake8
se pueden utilizar como sección.
ejemplo de archivo de configuración:
[estilo pycode] longitud_línea_max = 120 ignorar = E501
autopep8 también puede usar pyproject.toml
. La sección debe ser [tool.autopep8]
y pyproject.toml
tiene prioridad sobre cualquier otro archivo de configuración.
ejemplo de archivo de configuración:
[herramienta.autopep8] longitud_línea_max = 120 ignorar = "E501,W6" # o ["E501", "W6"] en el lugar = verdadero recursivo = verdadero agresivo = 3
autopep8 se puede utilizar como gancho para la confirmación previa.
Para agregar autopep8 como complemento, agregue esta definición de repositorio a su configuración:
repositorios: - repositorio: https://github.com/hhatto/autopep8rev: ... # seleccione la etiqueta o revisión que desee, o ejecute los ganchos `pre-commit autoupdate`: - identificación: autopep8
Los casos de prueba están en test/test_autopep8.py
. Se pueden ejecutar directamente a través de python test/test_autopep8.py
o mediante tox. Este último es útil para realizar pruebas con múltiples intérpretes de Python. (Actualmente realizamos pruebas con las versiones 3.8, 3.9, 3.10, 3.11 y 3.12 de CPython. También realizamos pruebas con PyPy).
Las pruebas de amplio espectro están disponibles a través de test/acid.py
. Este script ejecuta autopep8 con código Python y verifica que las correcciones del código sean correctas y estén completas. Puede comprobar que el código de bytes sigue siendo idéntico. test/acid_pypi.py
utiliza acid.py
para realizar pruebas con los últimos paquetes lanzados en PyPI.
pkg_resources.DistributionNotFound
Si está utilizando una versión antigua de setuptools
, es posible que encuentre pkg_resources.DistributionNotFound
al intentar ejecutar autopep8
. Intente actualizar setuptools
para solucionar este problema setuptools
:
$ pip install --actualizar herramientas de configuración
Utilice sudo
si está instalando en el sistema.
PyPI
GitHub
códigocov