Bukankah seharusnya judul diedit untuk memasukkan pep8 sebagai opsi? Pada awalnya, saya pikir kalian berbicara tentang proposisi, bukan paket PyPI yang sebenarnya.
Ehtesh Choudhury
Jawaban:
275
Yah, saya agak penasaran, jadi saya hanya menguji 3 sendiri setelah mengajukan pertanyaan ;-)
Ok, ini bukan ulasan yang sangat serius tapi ini yang bisa saya katakan:
Saya mencoba alat-alat dengan pengaturan default (ini penting karena Anda dapat memilih aturan cek) pada skrip berikut:
#!/usr/local/bin/python# by Daniel Rosengren modified by e-satisimport sys, time
stdout = sys.stdout
BAILOUT =16
MAX_ITERATIONS =1000classIterator(object):def __init__(self):print'Rendering...'for y in xrange(-39,39):
stdout.write('\n')for x in xrange(-39,39):if self.mandelbrot(x/40.0, y/40.0):
stdout.write(' ')else:
stdout.write('*')def mandelbrot(self, x, y):
cr = y -0.5
ci = x
zi =0.0
zr =0.0for i in xrange(MAX_ITERATIONS):
temp = zr * zi
zr2 = zr * zr
zi2 = zi * zi
zr = zr2 - zi2 + cr
zi = temp + temp + ciif zi2 + zr2 > BAILOUT:return ireturn0
t = time.time()Iterator()print'\nPython Elapsed %.02f'%(time.time()- t)
Hasil dari :
PyCheckerbermasalah karena mengkompilasi modul untuk menganalisanya. Jika Anda tidak ingin kode Anda dijalankan (misalnya, ia menjalankan query SQL), itu buruk.
PyFlakesseharusnya lite. Memang, itu memutuskan bahwa kode itu sempurna. Saya mencari sesuatu yang sangat parah sehingga saya tidak berpikir saya akan melakukannya.
PyLint telah sangat cerewet dan diberi nilai kode 3/10 (OMG, saya seorang programmer kotor!).
Poin-poin kuat dari PyLint:
Laporan yang sangat deskriptif dan akurat.
Mendeteksi beberapa bau kode. Di sini ia mengatakan kepada saya untuk meninggalkan kelas saya untuk menulis sesuatu dengan fungsi karena pendekatan OO tidak berguna dalam kasus khusus ini. Sesuatu yang saya tahu, tetapi tidak pernah berharap komputer memberi tahu saya :-p
Kode yang sepenuhnya dikoreksi berjalan lebih cepat (tidak ada kelas, tidak ada referensi yang mengikat ...).
Dibuat oleh tim Prancis. Oke, ini bukan nilai tambah untuk semua orang, tapi saya suka ;-)
Kekurangan dari PyLint:
Beberapa aturan sangat ketat. Saya tahu bahwa Anda dapat mengubahnya dan defaultnya adalah untuk mencocokkan PEP8, tetapi apakah merupakan kejahatan untuk menulis 'untuk x dalam seq'? Tampaknya ya karena Anda tidak dapat menulis nama variabel dengan kurang dari 3 huruf. Saya akan mengubahnya.
Sangat banyak bicara. Bersiaplah untuk menggunakan mata Anda.
Script dikoreksi (dengan string dokumen malas dan nama variabel):
Terima kasih kepada Rudiger Wolf, saya menemukan pep8yang melakukan persis seperti namanya: mencocokkan PEP8. Telah ditemukan beberapa sintaks no-no yang PyLint tidak. Tetapi PyLintmenemukan hal-hal yang tidak secara khusus terkait dengan PEP8 tetapi menarik. Kedua alat itu menarik dan saling melengkapi.
Akhirnya saya akan menggunakan keduanya karena ada sangat mudah untuk menginstal (melalui paket atau setuptools) dan teks keluaran sangat mudah untuk berantai.
Untuk memberi Anda sedikit gambaran tentang hasil mereka:
pep8 :
./python_mandelbrot.py:4:11: E401 multiple imports on one line./python_mandelbrot.py:10:1: E302 expected 2 blank lines, found 1./python_mandelbrot.py:10:23: E203 whitespace before ':'./python_mandelbrot.py:15:80: E501 line too long (108 characters)./python_mandelbrot.py:23:1: W291 trailing whitespace./python_mandelbrot.py:41:5: E301 expected 1 blank line, found 3
PyLint :
*************Module python_mandelbrot
C:15:Line too long (108/80)
C:61:Line too long (85/80)
C:1:Missing docstring
C:5:Invalid name "stdout"(should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:10:Iterator:Missing docstring
C:15:Iterator.__init__:Invalid name "y"(should match [a-z_][a-z0-9_]{2,30}$)
C:17:Iterator.__init__:Invalid name "x"(should match [a-z_][a-z0-9_]{2,30}$)[...]and a very long report with useful stats like :Duplication-----------+-------------------------+------+---------+-----------+||now |previous |difference |+=========================+======+=========+===========+|nb duplicated lines |0|0|=|+-------------------------+------+---------+-----------+|percent duplicated lines |0.000|0.000|=|+-------------------------+------+---------+-----------+
Tujuan dari pyflakes adalah menganalisis kode Anda secara statis untuk memastikan tidak ada kesalahan nama atau variabel / impor yang tidak digunakan.
culebrón
4
Apakah saya salah atau tidak ada poin kuat / lemah untuk PyChecker atau PyFlakes?
Wernight
17
"Poin kuat: Laporan yang sangat deskriptif dan akurat." Laporan yang mana? Apakah bagian ini tentang semua alat atau hanya satu?
ijk
3
Aku penasaran. Saya sebelumnya menulis seluruh pro / kontra hanya tentang PyLint. Saya tidak tahu mengapa saya menulis dengan cara bodoh ini. Mabuk mungkin? Maaf kawan
e-satis
13
flake8 mencakup keduanya pyflakesdan pep8. Sangat menyarankannya daripada hanya menggunakan satu atau yang lain.
Ehtesh Choudhury
93
pep8 baru-baru ini ditambahkan ke PyPi.
pep8 - pemeriksa panduan gaya Python
pep8 adalah alat untuk memeriksa kode Python Anda terhadap beberapa konvensi gaya di PEP 8.
Sekarang sangat mudah untuk memeriksa kode Anda terhadap pep8.
Ada paket IMO yang lebih baik. flake8, menggabungkan keduanya dan menambah kompleksitas bersyarat, bekerja pada direktori dan umumnya bagus.
DinGODzilla
1
Berlari flake8untuk pertama kalinya mengajari saya bahwa saya terjun langsung ke proyek tanpa mengetahui bahwa Python lebih menyukai ruang karena suatu alasan. Saya harus menggunakan --ignore W191untuk membuat output bermanfaat.
cjm
3
Perhatikan bahwa versi terbaru pep8sekarang disebut pycodestyle; lihat pypi.org/project/pycodestyle @cjm: python sangat menyukai spasi karena itulah yang ditentukan oleh pedoman gaya. Ruang tidak selalu unggul, tetapi konsistensi di seluruh komunitas adalah keuntungan besar, dan komunitas telah memutuskan ruang, jadi lakukan itu.
Chris L. Barnes
Bagaimana cara terbaik mengkonfigurasi editor saya (baik BBEdit atau vim) untuk menggunakan spasi untuk Python dan tab untuk yang lainnya? Tampaknya (setidaknya untuk BBEdit) ini adalah pengaturan global.
cjm
1
@ cjm Dalam vim, Anda dapat melakukan :set et(kependekan expandtabs) dan kemudian :retabmengubah semua tab di buffer saat ini menjadi spasi. Hal ini juga mungkin berguna untuk mengatur ts=4 sts=4 sw=4( tabstop, softtabstop, shiftwidth) pertama. Sejauh pendekatan umum, saya lebih suka menggunakan editorconfig.org dan pluginsnya untuk mengatur pengaturan yang tepat dalam sebuah repo, jadi Anda tidak perlu khawatir tentang mengkonfigurasi ulang editor Anda untuk basis kode yang berbeda.
Jawaban:
Yah, saya agak penasaran, jadi saya hanya menguji 3 sendiri setelah mengajukan pertanyaan ;-)
Ok, ini bukan ulasan yang sangat serius tapi ini yang bisa saya katakan:
Saya mencoba alat-alat dengan pengaturan default (ini penting karena Anda dapat memilih aturan cek) pada skrip berikut:
Hasil dari :
PyChecker
bermasalah karena mengkompilasi modul untuk menganalisanya. Jika Anda tidak ingin kode Anda dijalankan (misalnya, ia menjalankan query SQL), itu buruk.PyFlakes
seharusnya lite. Memang, itu memutuskan bahwa kode itu sempurna. Saya mencari sesuatu yang sangat parah sehingga saya tidak berpikir saya akan melakukannya.PyLint
telah sangat cerewet dan diberi nilai kode 3/10 (OMG, saya seorang programmer kotor!).Poin-poin kuat dari
PyLint
:Kekurangan dari
PyLint
:Script dikoreksi (dengan string dokumen malas dan nama variabel):
EDIT:
Terima kasih kepada Rudiger Wolf, saya menemukan
pep8
yang melakukan persis seperti namanya: mencocokkan PEP8. Telah ditemukan beberapa sintaks no-no yang PyLint tidak. TetapiPyLint
menemukan hal-hal yang tidak secara khusus terkait dengan PEP8 tetapi menarik. Kedua alat itu menarik dan saling melengkapi.Akhirnya saya akan menggunakan keduanya karena ada sangat mudah untuk menginstal (melalui paket atau setuptools) dan teks keluaran sangat mudah untuk berantai.
Untuk memberi Anda sedikit gambaran tentang hasil mereka:
pep8 :
PyLint :
sumber
pyflakes
danpep8
. Sangat menyarankannya daripada hanya menggunakan satu atau yang lain.pep8 baru-baru ini ditambahkan ke PyPi.
Sekarang sangat mudah untuk memeriksa kode Anda terhadap pep8.
Lihat http://pypi.python.org/pypi/pep8
sumber
flake8
, menggabungkan keduanya dan menambah kompleksitas bersyarat, bekerja pada direktori dan umumnya bagus.flake8
untuk pertama kalinya mengajari saya bahwa saya terjun langsung ke proyek tanpa mengetahui bahwa Python lebih menyukai ruang karena suatu alasan. Saya harus menggunakan--ignore W191
untuk membuat output bermanfaat.pep8
sekarang disebutpycodestyle
; lihat pypi.org/project/pycodestyle @cjm: python sangat menyukai spasi karena itulah yang ditentukan oleh pedoman gaya. Ruang tidak selalu unggul, tetapi konsistensi di seluruh komunitas adalah keuntungan besar, dan komunitas telah memutuskan ruang, jadi lakukan itu.:set et
(kependekanexpandtabs
) dan kemudian:retab
mengubah semua tab di buffer saat ini menjadi spasi. Hal ini juga mungkin berguna untuk mengaturts=4 sts=4 sw=4
(tabstop
,softtabstop
,shiftwidth
) pertama. Sejauh pendekatan umum, saya lebih suka menggunakan editorconfig.org dan pluginsnya untuk mengatur pengaturan yang tepat dalam sebuah repo, jadi Anda tidak perlu khawatir tentang mengkonfigurasi ulang editor Anda untuk basis kode yang berbeda.