Saya menjalankan PyLint pada proyek Python. PyLint membuat banyak keluhan tentang tidak dapat menemukan anggota yang numpy. Bagaimana saya bisa menghindari ini sambil menghindari melewatkan cek keanggotaan.
Dari kode:
import numpy as np
print np.zeros([1, 4])
Yang, ketika berlari, saya mendapatkan yang diharapkan:
[[0. 0. 0. 0.]]
Namun, pylint memberi saya kesalahan ini:
E: 3, 6: Modul 'numpy' tidak memiliki anggota 'nol' (tidak ada anggota)
Untuk versi, saya menggunakan pylint 1.0.0 (astroid 1.0.1, 0.60.0 umum) dan mencoba bekerja dengan numpy 1.8.0.
Saya memiliki masalah yang sama di sini, bahkan dengan versi terbaru dari semua paket terkait (
astroid 1.3.2
,logilab_common 0.63.2
,pylon 1.4.0
).Solusi berikut ini berfungsi seperti pesona: Saya menambahkan
numpy
ke daftar modul yang diabaikan dengan memodifikasipylintrc
file saya , di[TYPECHECK]
bagian:Bergantung pada kesalahan, Anda mungkin juga perlu menambahkan baris berikut (masih di dalam
[TYPECHECK] section
):sumber
extension-pkg-whitelist=numpy
baris di bawah[MASTER]
judul file .pylintrc. pylint tampaknya merupakan perangkat lunak yang cukup rapuh dan membutuhkan sentuhan ahli agar tetap berfungsi untuk tugas-tugas dasar.--extension-pkg-whitelist
, yang sebenarnya melakukan impor untuk modul yang ditentukan.Saya mendapatkan kesalahan yang sama untuk proyek numpy kecil yang sedang saya kerjakan dan memutuskan bahwa mengabaikan modul numpy akan baik-baik saja. Saya membuat
.pylintrc
file dengan:$ pylint --generate-rcfile > ~/.pylintrc
dan mengikuti saran paduwan dan j_houg saya memodifikasi sektor-sektor berikut:
dan
dan itu "memperbaiki" masalah saya.
sumber
ignored-*
pintu masuk juga? Bagi saya, hanya menambahkan modul ke daftar putih ekstensi berfungsi dengan baik.Dalam versi terbaru pylint Anda dapat menambahkan
--extension-pkg-whitelist=numpy
perintah pylint Anda. Mereka telah memperbaiki masalah ini di versi sebelumnya dengan cara yang tidak aman. Sekarang jika Anda ingin mereka melihat lebih cermat paket di luar perpustakaan standar, Anda harus secara eksplisit memasukkannya dalam daftar putih. Lihat disini.sumber
Karena ini adalah hasil teratas di google dan itu memberi saya kesan bahwa Anda harus mengabaikan peringatan itu di semua file:
Masalahnya sebenarnya telah diperbaiki pada sumber pylint / astroid bulan lalu https://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e tetapi belum ada dalam paket Ubuntu.
Untuk mendapatkan sumbernya, adil
dimana langkah terakhir kemungkinan besar akan membutuhkan
sudo
dan tentu saja Anda perlu lincah untuk mengkloning.sumber
from numpy import ceil
hasil kode ini diE: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module)
saya memeriksa komit yang dirujuk di atas dan tampaknya perubahan itu ada dalam versi astroid yang saya miliki.Module 'numpy' has no 'zeros' member (no-member)
Untuk mengabaikan semua kesalahan yang dihasilkan oleh atribut numpy.core, sekarang kita dapat menggunakan:
Sebagai solusi lain, tambahkan opsi ini ke file ~ / .pylintrc atau / etc / pylintrc :
Untuk disebutkan dalam kode pertanyaan sekarang ini tampaknya redup, tetapi masih penting untuk modul lain, yaitu. netifaces dan lain-lain
sumber
patsy.dmatrices
. Menambahgenerated-members=patsy.dmatrices
memecahkan masalah saya.Jika Anda tidak ingin menambahkan konfigurasi lagi, harap tambahkan kode ini ke file konfigurasi Anda, alih-alih 'daftar putih'.
sumber
pylint: error: no such option: --generate-members
Ada banyak bug berbeda yang dilaporkan tentang ini selama beberapa tahun terakhir yaitu https://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports
Saya sarankan menonaktifkan untuk jalur di mana keluhan terjadi.
sumber
Mungkin, itu bingung dengan metode impor numpy metode kasar. Yaitu,
zeros
sebenarnyanumpy.core.multiarray.zeros
, diimpor numpy dengan pernyataanpada gilirannya diimpor dengan
dan dalam numerik Anda akan menemukan
Saya kira saya akan bingung menggantikan PyLint!
Lihat bug ini untuk sisi tampilan PyLint.
sumber
Saya harus menambahkan ini di bagian atas file mana pun yang sering saya gunakan numpy.
Hanya dalam kasus seseorang dalam gerhana mengalami masalah dengan Pydev dan pylint ...
sumber
Dalam ekstensi ke j_hougs jawaban, Anda sekarang dapat menambahkan modul yang dimaksud ke baris ini di .pylintrc, yang sudah disiapkan kosong pada generasi:
Anda dapat menghasilkan sampel .pylintrc dengan melakukan:
dan kemudian edit baris yang disebutkan
sumber
Ini akhirnya diselesaikan dalam Pylint 1.8.2. Bekerja di luar kotak, tidak ada tweak pylintrc diperlukan!
sumber
Ini adalah solusi semu yang saya buat untuk masalah ini.
Kemudian, dalam kode Anda, bukan memanggil
numpy
fungsi sebagainp.array
dannp.zeros
dan sebagainya, Anda akan menulisnp_array
,np_zeros
, dll Keuntungan dari pendekatan ini vs pendekatan lain yang disarankan dalam jawaban lain:Kerugian yang jelas adalah bahwa Anda harus mengimpor setiap fungsi numpy yang Anda gunakan secara eksplisit. Pendekatannya bisa dijabarkan lebih lanjut. Anda bisa mendefinisikan modul Anda sendiri, sebut saja katakan,
numpy_importer
sebagai berikutKemudian, kode aplikasi Anda hanya dapat mengimpor modul ini (bukan numpy) sebagai
dan menggunakan nama-nama seperti biasa:
np.zeros
,np.array
dllKeuntungan dari ini adalah bahwa Anda akan memiliki satu modul di mana semua
numpy
impor terkait dilakukan sekali dan untuk semua, dan kemudian Anda mengimpornya dengan satu baris itu, di mana pun Anda inginkan. Namun Anda harus berhati-hati agarnumpy_importer
tidak mengimpor nama yang tidak adanumpy
karena kesalahan tersebut tidak akan ditangkap oleh pylint.sumber
Saya punya masalah dengan numpy, scipy, sklearn, nipy, dll, dan saya menyelesaikannya dengan membungkus epylint seperti:
$ cat epylint.py
Script ini menjalankan epylint, lalu mengikis outputnya untuk menyaring peringatan dan kesalahan positif palsu. Anda dapat memperpanjangnya dengan menambahkan lebih banyak kasus elif.
NB: Jika ini berlaku untuk Anda, maka Anda ingin memodifikasi pychechers.sh Anda sehingga suka seperti ini
(Tentu saja, Anda harus membuat epylint.py dieksekusi terlebih dahulu)
Berikut ini tautan ke .emacs saya https://github.com/dohmatob/mydotemacs . Semoga ini bermanfaat bagi seseorang.
sumber
Ini tampaknya berfungsi setidaknya pada Pylint 1.1.0:
sumber
Solusi ini berhasil untuk saya
Pada dasarnya, pergi ke Pilih ikon gir dari kiri bawah => Pengaturan => Pengaturan Ruang Kerja => Ekstensi => Konfigurasi Python => Klik pada Settings.json => tambahkan ini di file "python.linting.pylintArgs": [" --extension-pkg-whitelist = numpy "] Saya menggunakan VS 1.27.2
sumber
Saya punya masalah yang sama dengan modul yang berbeda (
kivy.properties
) yang merupakan modul C dibungkus sepertinumpy
.Menggunakan VSCode V1.38.0, solusi yang diterima menghentikan semua linting untuk proyek. Jadi, sementara itu memang menghilangkan false-positive
no-name-in-module
, itu tidak benar-benar memperbaiki situasi.Solusi terbaik bagi saya adalah dengan menggunakan
--ignored-modules
argumen pada modul yang menyinggung. Masalahnya, melewati argumen melaluipython.linting.pylintArgs
tisu keluar pengaturan VSCode standar , sehingga Anda perlu kembali mengatur mereka juga. Itu membuat saya dengan file settings.json berikut:sumber
Sedikit copy paste dari jawaban sebelumnya untuk meringkas apa yang berfungsi (setidaknya untuk saya: debian-jessie)
Dalam beberapa versi yang lebih lama
pylint
ada masalah yang mencegahnya bekerja dengan numpy (dan paket serupa lainnya).Sekarang masalah telah dipecahkan tetapi paket-paket C eksternal (antarmuka python ke kode C-seperti numpy-) dinonaktifkan secara default untuk alasan keamanan.
Anda dapat membuat daftar putih, agar dapat
pylint
menggunakannya dalam file~/.pylintrc
.Perintah dasar untuk dijalankan: # HANYA jika Anda belum memiliki file .pylintrc di rumah Anda $ pylint --generate-rcfile> .pylintrc
Kemudian buka file dan tambahkan paket yang Anda inginkan setelah
extension-pkg-whitelist=
dipisahkan dengan koma. Anda dapat memiliki perilaku yang sama menggunakan opsi--extension-pkg-whitelist=numpy
dari baris perintah.Jika Anda mengabaikan beberapa paket di
[TYPECHECK]
bagian itu berartipylint
tidak akan pernah menampilkan kesalahan terkait dengan paket itu. Dalam praktiknya,pylint
tidak akan memberi tahu Anda apa pun tentang paket-paket itu.sumber
Saya telah mengerjakan patch untuk pylint untuk menyelesaikan masalah dengan anggota dinamis di perpustakaan seperti numpy. Ini menambahkan opsi "dynamic-modules" yang memaksa untuk memeriksa apakah ada anggota saat runtime dengan melakukan impor nyata dari modul. Lihat Edisi # 413 di logilab / pylint . Ada juga permintaan tarik, lihat tautan di salah satu komentar.
sumber
Jawaban cepat: perbarui Pylint ke 1.7.1 (gunakan conda-forge yang disediakan Pylint 1.7.1 jika Anda menggunakan conda untuk mengelola paket)
Saya menemukan masalah yang serupa di pylint GitHub di sini dan seseorang menjawab semuanya membaik setelah memperbarui ke 1.7.1.
sumber
Saya tidak yakin apakah ini solusi, tetapi dalam VSCode setelah saya menulis secara eksplisit di pengaturan pengguna saya untuk mengaktifkan pylint, semua modul dikenali.
sumber
Akhir-akhir ini (karena sesuatu berubah pada spyder atau pylint atau?), Saya mendapatkan error E1101 ("no member") dari analisis kode statis spyder pada simbol astropy.constants. Tidak tahu kenapa.
Solusi simplistis saya untuk semua pengguna di sistem Linux atau Unix (Mac mungkin serupa) adalah membuat / etc / pylintrc sebagai berikut:
Tentu saja, ini bisa, sebaliknya, dimasukkan ke dalam file $ HOME / .pylintrc pribadi. Dan, saya bisa memperbarui file yang sudah ada.
sumber