autopep8 secara otomatis memformat kode Python agar sesuai dengan panduan gaya PEP 8. Ia menggunakan utilitas pycodestyle untuk menentukan bagian kode mana yang perlu diformat. autopep8 mampu memperbaiki sebagian besar masalah pemformatan yang dapat dilaporkan oleh pycodestyle.
Isi
Instalasi
Persyaratan
Penggunaan
Fitur
Penggunaan lebih lanjut
Menonaktifkan baris demi baris
Gunakan sebagai modul
Konfigurasi
proyek py.toml
Penggunaan dengan pra-komitmen
Pengujian
Pemecahan masalah
pkg_resources.DistributionNotFound
Tautan
Dari pip:
$ pip install --upgrade autopep8
Pertimbangkan untuk menggunakan opsi --user
.
autopep8 membutuhkan gaya pycode.
Untuk memodifikasi file di tempatnya (dengan level agresif 2):
$ autopep8 --di tempat --agresif --agresif
Sebelum menjalankan autopep8.
import math, sys;def example1():####Ini adalah komentar yang panjang. Ini harus dibungkus agar muat dalam 72 karakter.some_tuple=( 1,2, 3,'a' );some_variable={'long':'Baris kode yang panjang harus dibungkus dalam 79 karakter.','other':[math .pi, 100,200,300,9876543210,'Ini adalah string panjang yang berlanjut'],'more':{'inner':'Seluruh baris logis ini harus dibungkus.',some_tuple:[1,20,300,40000,500000000,600000000000000000]}}return (some_tuple, some_variable)def example2(): return {'has_key() adalah deprecated':True}.has_key({'f':2}.has_key(''));class Contoh3( objek ):def __init__ ( self, bar ): #Komentar harus diberi spasi setelah hash. jika batang : batang+=1; batang=bar* batang ; return bar else:some_string = """ Indentasi dalam string multiline tidak boleh disentuh. Hanya kode sebenarnya yang harus diindentasi ulang."""return (sys.path, some_string)
Setelah menjalankan autopep8.
import mathimport sysdef example1():# Komentar ini panjang. Ini harus digabungkan agar muat dalam 72# karakter.some_tuple = (1, 2, 3, 'a')some_variable = {'long': 'Baris kode yang panjang harus dimasukkan dalam 79 karakter.','other': [math .pi,100,200,300,9876543210,'Ini adalah string panjang yang berlanjut'],'more': {'inner': 'Seluruh baris logis ini seharusnya dibungkus.',some_tuple: [1,20,300,40000,500000000,600000000000000000]}}return (some_tuple, some_variable)def example2(): return ('' in {'f': 2}) in {'has_key() sudah tidak digunakan lagi': Benar}kelas Contoh3(objek):def __init__(self, bar):# Komentar harus diberi spasi setelah hash.if bar:bar += 1bar = bar * barreturn barese:some_string = """ Indentasi pada string multiline tidak boleh disentuh. Hanya kode sebenarnya yang harus diindentasi ulang ."""kembali (sys.path, some_string)
Pilihan:
penggunaan: autopep8 [-h] [--versi] [-v] [-d] [-i] [--nama file global-config] [--abaikan-konfigurasi-lokal] [-r] [-j n] [-p n] [-a] [--eksperimental] [--kecualikan gumpalan] [--daftar-perbaikan] [--abaikan kesalahan] [--pilih kesalahan] [--panjang garis maksimal n] [--garis-garis rentang garis] [--hang-closing] [--kode keluar] [file [file ...]] Secara otomatis memformat kode Python agar sesuai dengan panduan gaya PEP 8. argumen posisi: file file yang akan diformat atau '-' untuk standar dalam argumen opsional: -h, --help tampilkan pesan bantuan ini dan keluar --version tampilkan nomor versi program dan keluar -v, --verbose mencetak pesan verbose; multiple -v menghasilkan lebih banyak pesan yang bertele-tele -d, --diff mencetak perbedaan untuk sumber tetap -i, --in-place melakukan perubahan pada file di tempatnya --global-config nama file jalur ke file konfigurasi pep8 global; jika file ini bisa tidak ada maka ini diabaikan (default: ~/.config/pep8) --abaikan-konfigurasi-lokal jangan mencari dan menerapkan file konfigurasi lokal; jika tidak berlalu, default diperbarui dengan file konfigurasi apa pun di dalamnya direktori root proyek -r, --recursive dijalankan secara rekursif pada direktori; harus digunakan dengan --di tempat atau --diff -j n, --pekerjaan n jumlah pekerjaan paralel; cocokkan jumlah CPU jika nilainya kurang dari 1 -p n, --pep8-melewati n jumlah maksimum operan pep8 tambahan (default: tak terbatas) -a, --aggressive mengaktifkan perubahan non-spasi; banyak -a menghasilkan perubahan yang lebih agresif --experimental aktifkan perbaikan eksperimental --exclude globs kecualikan nama file/direktori yang cocok dengan koma ini- gumpalan yang terpisah --list-fixes mencantumkan kode untuk perbaikan; digunakan oleh --ignore dan --select --ignore error tidak memperbaiki kesalahan/peringatan ini (default: E226,E24,W50,W690) --pilih kesalahan hanya memperbaiki kesalahan/peringatan ini (misalnya E4,W) --max-line-length n mengatur panjang garis maksimum yang diperbolehkan (default: 79) --garis-rentang garis garis, --garis rentang garis hanya memperbaiki kesalahan yang ditemukan dalam rentang inklusif ini nomor baris (misalnya 1 99); nomor baris diindeks pada 1 --hang-closing opsi hang-closing diteruskan ke pycodestyle --exit-code mengubah perilaku kode keluar. perilaku default dari nilai kembalian, 0 tidak ada perbedaan, 1 adalah keluar dari kesalahan. kembalikan 2 saat menambahkan opsi ini. 2 ada perbedaan.
autopep8 memperbaiki masalah berikut yang dilaporkan oleh pycodestyle:
E101 - Identifikasi ulang semua lini. E11 - Perbaiki lekukan. E121 - Perbaiki lekukan menjadi kelipatan empat. E122 - Tambahkan lekukan yang tidak ada untuk lekukan gantung. E123 - Sejajarkan braket penutup agar sesuai dengan braket pembuka. E124 - Sejajarkan braket penutup agar sesuai dengan lekukan visual. E125 - Indentasi untuk membedakan baris dari baris logis berikutnya. E126 - Perbaiki lekukan gantung yang menjorok ke dalam. E127 - Memperbaiki lekukan visual. E128 - Perbaiki lekukan visual. E129 - Memperbaiki lekukan visual. E131 - Perbaiki indentasi gantung untuk garis lanjutan yang tidak sejajar. E133 - Perbaiki lekukan yang hilang untuk braket penutup. E20 - Hapus spasi asing. E211 - Hapus spasi asing. E22 - Memperbaiki spasi kosong di sekitar kata kunci. E224 - Hapus spasi asing di sekitar operator. E225 - Memperbaiki spasi yang hilang di sekitar operator. E226 - Memperbaiki spasi yang hilang di sekitar operator aritmatika. E227 - Memperbaiki spasi yang hilang di sekitar operator bitwise/shift. E228 - Memperbaiki spasi yang hilang di sekitar operator modulo. E231 - Tambahkan spasi yang hilang. E241 - Memperbaiki spasi kosong di sekitar kata kunci. E242 - Hapus spasi asing di sekitar operator. E251 - Hapus spasi di sekitar tanda parameter '='. E252 - Tidak ada spasi di sekitar parameter sama dengan. E26 - Memperbaiki spasi setelah hash komentar untuk komentar sebaris. E265 - Memperbaiki spasi setelah hash komentar untuk memblokir komentar. E266 - Perbaiki terlalu banyak awalan '#' untuk memblokir komentar. E27 - Memperbaiki spasi kosong di sekitar kata kunci. E301 - Tambahkan baris kosong yang hilang. E302 - Tambahkan 2 baris kosong yang hilang. E303 - Hapus baris kosong tambahan. E304 - Hapus baris kosong berikut dekorator fungsi. E305 - Diharapkan 2 baris kosong setelah fungsi atau kelas berakhir. E306 - Diharapkan 1 baris kosong sebelum definisi bertingkat. E401 - Tempatkan impor pada jalur terpisah. E402 - Memperbaiki impor tingkat modul tidak di atas file E501 - Cobalah untuk membuat garis sesuai dengan karakter --max-line-length. E502 - Hapus keluarnya baris baru yang asing. E701 - Letakkan pernyataan majemuk yang dipisahkan titik dua pada baris terpisah. E70 - Letakkan pernyataan majemuk yang dipisahkan titik koma pada baris terpisah. E711 - Perbaiki perbandingan dengan Tidak Ada. E712 - Perbaiki perbandingan dengan boolean. E713 - Gunakan 'not in' untuk tes keanggotaan. E714 - Gunakan tes 'bukan' untuk identitas objek. E721 - Gunakan "isinstance()" daripada membandingkan tipe secara langsung. E722 - Perbaiki telanjang kecuali. E731 - Gunakan def saat penggunaan tidak menetapkan ekspresi lambda. W291 - Hapus spasi tambahan. W292 - Tambahkan satu baris baru di akhir file. W293 - Hapus spasi tambahan pada baris kosong. W391 - Hapus baris kosong yang tertinggal. W503 - Memperbaiki jeda baris sebelum operator biner. W504 - Memperbaiki jeda baris setelah operator biner. W605 - Memperbaiki urutan escape 'x' yang tidak valid.
autopep8 juga memperbaiki beberapa masalah yang tidak ditemukan oleh pycodestyle.
Normalisasikan file dengan akhiran baris campuran.
Letakkan baris kosong di antara kelas docstring dan deklarasi metode pertamanya. (Diaktifkan dengan E301
.)
Hapus baris kosong antara deklarasi fungsi dan docstringnya. (Diaktifkan dengan E303
.)
autopep8 menghindari perbaikan beberapa masalah yang ditemukan oleh pycodestyle.
E112
/ E113
untuk non komentar adalah laporan indentasi buruk yang melanggar aturan sintaksis. Ini tidak boleh diubah sama sekali.
E265
, yang mengacu pada spasi setelah hash komentar, diabaikan jika komentar terlihat seperti kode. autopep8 menghindari modifikasi ini karena itu bukan komentar asli. Jika Anda benar-benar ingin menghilangkan peringatan pycodestyle, pertimbangkan untuk menghapus kode yang dikomentari saja. (Ini dapat diotomatisasi melalui eradikasi.)
Secara default autopep8 hanya melakukan perubahan spasi. Jadi, secara default, ini tidak memperbaiki E711
dan E712
. (Mengubah x == None
menjadi x is None
dapat mengubah arti program jika metode __eq__
x
diganti.) Juga tidak memperbaiki kode yang tidak digunakan lagi W6
. Untuk mengaktifkan perbaikan yang lebih agresif ini, gunakan opsi --aggressive
:
$ autopep8 --agresif
Gunakan multiple --aggressive
untuk meningkatkan tingkat agresivitas. Misalnya, E712
memerlukan tingkat agresivitas 2 (karena x == True
dapat diubah menjadi x
atau x is True
, tetapi autopep8 memilih yang pertama).
--aggressive
juga akan memperpendek garis dengan lebih agresif. Ini juga akan menghapus spasi tambahan dengan lebih agresif. (Biasanya, kami tidak menyentuh spasi tambahan di docstrings dan string multiline lainnya. Dan untuk melakukan perubahan yang lebih agresif pada docstrings, gunakan docformatter.)
Untuk mengaktifkan hanya sebagian perbaikan, gunakan opsi --select
. Misalnya, untuk memperbaiki berbagai jenis masalah lekukan:
$ autopep8 --pilih=E1,W1
Jika file yang diperbaiki berukuran besar, Anda mungkin ingin mengaktifkan pesan kemajuan yang panjang:
$ autopep8 -v
Meneruskan --experimental
mengaktifkan fungsi berikut:
Memperpendek baris kode dengan mempertimbangkan panjangnya
$ autopep8 --eksperimental
Dimungkinkan untuk menonaktifkan autopep8 hingga dihidupkan kembali di file, menggunakan autopep8: off
dan kemudian mengaktifkan kembali dengan autopep8: on
.
# autopep8: mati[ [23, 23, 13, 43], [32, 34, 34, 34], [56, 34, 34, 11], [10, 10, 10, 10], ]# autopep8: aktif
fmt: off
dan fmt: on
juga valid.
Cara paling sederhana menggunakan autopep8 sebagai modul adalah melalui fungsi fix_code()
:
>>> impor autopep8 >>> autopep8.fix_code('x= 123n') 'x = 123n'
Atau dengan pilihan:
>>> impor autopep8 >>> autopep8.fix_code('cetak( 123 )n', ... pilihan={'abaikan': ['E']}) 'cetak( 123 )n'
Secara default, jika $HOME/.config/pycodestyle
( ~.pycodestyle
di lingkungan Windows) ada, maka akan digunakan sebagai file konfigurasi global. Alternatifnya, Anda dapat menentukan file konfigurasi global dengan opsi --global-config
.
Selain itu, jika file setup.cfg
, tox.ini
, .pep8
dan .flake8
ada di direktori tempat file target berada, maka file tersebut akan digunakan sebagai file konfigurasi.
pep8
, pycodestyle
, dan flake8
dapat digunakan sebagai bagian.
contoh file konfigurasi:
[gaya pikode] max_line_length = 120 abaikan = E501
autopep8 juga dapat menggunakan pyproject.toml
. Bagian tersebut harus [tool.autopep8]
, dan pyproject.toml
lebih diutamakan daripada file konfigurasi lainnya.
contoh file konfigurasi:
[alat.autopep8] max_line_length = 120 abaikan = "E501,W6" # atau ["E501", "W6"] di tempat = benar rekursif = benar agresif = 3
autopep8 dapat digunakan sebagai pengait untuk pra-komit.
Untuk menambahkan autopep8 sebagai plugin, tambahkan definisi repo ini ke konfigurasi Anda:
repo: - repo: https://github.com/hhatto/autopep8rev: ... # pilih tag atau revisi yang Anda inginkan, atau jalankan `pre-commit autoupdate`hooks: - id: autopep8
Kasus uji ada di test/test_autopep8.py
. Mereka dapat dijalankan langsung melalui python test/test_autopep8.py
atau melalui tox. Yang terakhir ini berguna untuk menguji beberapa interpreter Python. (Saat ini kami menguji terhadap CPython versi 3.8, 3.9, 3.10, 3.11 dan 3.12. Kami juga menguji terhadap PyPy.)
Pengujian spektrum luas tersedia melalui test/acid.py
. Skrip ini menjalankan autopep8 terhadap kode Python dan memeriksa kebenaran dan kelengkapan perbaikan kode. Ia dapat memeriksa apakah bytecode tetap sama. test/acid_pypi.py
memanfaatkan acid.py
untuk menguji paket terbaru yang dirilis di PyPI.
pkg_resources.DistributionNotFound
Jika Anda menggunakan setuptools
versi kuno, Anda mungkin menemukan pkg_resources.DistributionNotFound
saat mencoba menjalankan autopep8
. Coba tingkatkan setuptools
untuk mengatasi masalah setuptools
ini:
$ pip install --upgrade alat pengaturan
Gunakan sudo
jika Anda menginstal ke sistem.
PyPI
GitHub
kodecov