ฉันจะทำให้ PyLint จดจำสมาชิกที่เป็นสมาชิกได้อย่างไร


163

ฉันกำลังใช้ PyLint ในโครงการ Python PyLint สร้างข้อร้องเรียนมากมายเกี่ยวกับการไม่สามารถหาสมาชิกที่มีจำนวนมาก ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไรในขณะที่หลีกเลี่ยงการตรวจสอบการเป็นสมาชิก

จากรหัส:

import numpy as np

print np.zeros([1, 4])

ซึ่งเมื่อฉันวิ่งฉันจะได้รับสิ่งที่คาดหวัง:

[[0. 0. 0. 0. ]]

อย่างไรก็ตาม pylint ให้ข้อผิดพลาดนี้กับฉัน:

E: 3, 6: โมดูล 'numpy' ไม่มีสมาชิก 'ศูนย์' (ไม่มีสมาชิก)

สำหรับรุ่นฉันใช้ pylint 1.0.0 (astroid 1.0.1, 0.60.0 ทั่วไป) และพยายามทำงานกับ numpy 1.8.0

คำตอบ:


75

ถ้าใช้Visual Studio Codeพร้อมด้วยส่วนขยาย Python ที่ยอดเยี่ยมของ Don Jayamanne ให้เพิ่มการตั้งค่าของผู้ใช้ในรายชื่อที่อนุญาตพิเศษ:

{
    // whitelist numpy to remove lint errors
    "python.linting.pylintArgs": [
        "--extension-pkg-whitelist=numpy"
    ]
}

2
สิ่งนี้ช่วย! บน VSCode 1.12.2 ยืนยันว่าใช้งานได้บน WIndows 10 x64
Simara

8
ฉันต้องการมากกว่านี้: "python.linting.pylintArgs": ["--ignored-modules = numpy", "--ignored-classes = numpy", "--extension-pkg-whitelist = numpy"]
Peter

2
โซลูชันของ @Peter ทำงานใน Windows 7 x64 และ Visual Studio Code 1.15.1 !!
BSP

3
@BSP โพสต์ของ Peter ไม่ได้แก้ปัญหา แต่จะข้ามไป ถ้าฉันสามารถลงคะแนนความคิดเห็นนี้ฉันจะ ..
Jonathan H

4
นี่ใช้ไม่ได้กับ pylint 2.3.0 อีกต่อไป
Guillochon

58

ฉันมีปัญหาเดียวกันที่นี่แม้จะมีรุ่นล่าสุดของแพคเกจที่เกี่ยวข้องทั้งหมด ( astroid 1.3.2, logilab_common 0.63.2, pylon 1.4.0)

วิธีแก้ไขปัญหาต่อไปนี้ทำงานได้อย่างมีเสน่ห์: ฉันเพิ่มลงnumpyในรายการโมดูลที่ถูกเพิกเฉยโดยการแก้ไขpylintrcไฟล์ของฉันใน[TYPECHECK]ส่วน:

[TYPECHECK]

ignored-modules = numpy

คุณอาจต้องเพิ่มบรรทัดต่อไปนี้ (ยังอยู่ใน[TYPECHECK] section) ทั้งนี้ขึ้นอยู่กับข้อผิดพลาด:

ignored-classes = numpy

2
บน linux ที่มี pylint 1.4.4, astroid 1.3.8 และ Python 3.4.3 สิ่งนี้ใช้ได้ แต่ฉันต้องวางextension-pkg-whitelist=numpyบรรทัดไว้ใต้[MASTER]หัวเรื่องของไฟล์. pylintrc ไพลินดูเหมือนจะเป็นซอฟต์แวร์ที่ค่อนข้างเปราะบางและต้องการการสัมผัสจากผู้เชี่ยวชาญเพื่อให้มันทำงานได้กับงานพื้นฐาน
Eric Leschinski

12
นี่ไม่ใช่ทางออกที่ดี สิ่งที่มันทำคือปิดการใช้งานการตรวจสอบ pylint อย่างสมบูรณ์สำหรับการมีอยู่ของสมาชิกใด ๆ เป็นการดีที่คุณต้องการให้มันรับรู้ได้อย่างถูกต้องซึ่งเป็นวิธีการแก้ปัญหาอื่น ๆ
iFreilicht

1
@iFreilicht มันเป็นมาตรการรักษาความปลอดภัย ที่รันไทม์นิยามของโมดูลสามารถเปลี่ยนแบบไดนามิก แต่การเปิดใช้งานสิ่งนี้ใน pylint จะเกี่ยวข้องกับการใช้รหัสโดยอำเภอใจ อย่างไรก็ตามฉันยังคงคาดหวังว่าจะมีบันทึกย่อในคำตอบเกี่ยวกับ--extension-pkg-whitelistซึ่งนำเข้าจริงสำหรับโมดูลที่ระบุ
Zev Spitz

43

ฉันได้รับข้อผิดพลาดเดียวกันสำหรับโครงการขนาดเล็กที่ฉันทำงานอยู่และตัดสินใจว่าการเพิกเฉยต่อโมดูล numpy จะทำได้ดี ฉันสร้าง.pylintrcไฟล์ด้วย:

$ pylint --generate-rcfile > ~/.pylintrc

และทำตามคำแนะนำของ paduwan และ j_houg ฉันได้แก้ไขส่วนต่อไปนี้:

[MASTER]

# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code
extension-pkg-whitelist=numpy

และ

[TYPECHECK]

# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=numpy

# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set). This supports can work
# with qualified names.
ignored-classes=numpy

และมัน "แก้ไข" ปัญหาของฉัน


6
คุณแน่ใจหรือไม่ว่าคุณต้องเพิ่มลงในสองignored-*ทางเข้าเช่นกัน? สำหรับฉันเพียงแค่เพิ่มโมดูลในรายการที่อนุญาตส่วนขยายทำงานได้อย่างสมบูรณ์
iFreilicht

39

ใน pylint รุ่นล่าสุดคุณสามารถเพิ่ม--extension-pkg-whitelist=numpyคำสั่ง pylint ของคุณ พวกเขาแก้ไขปัญหานี้ในเวอร์ชันก่อนหน้าด้วยวิธีที่ไม่ปลอดภัย ตอนนี้ถ้าคุณต้องการให้พวกเขาดูแพคเกจนอกไลบรารีมาตรฐานอย่างระมัดระวังมากขึ้นคุณต้องขึ้นบัญชีขาวอย่างปลอดภัย ดูที่นี่


2
ลิงก์ "ดูที่นี่" นั้นตาย วิธีแก้ปัญหายังคงใช้งานได้ แต่เป็นเรื่องยากที่จะเข้าใจว่าทำไม มันเป็นการดีที่จะเพิ่มข้อความที่ตัดตอนมาจากปัญหาที่เชื่อมโยง
GergelyPolonkai

ลิงก์ "ดูที่นี่" ได้รับการแก้ไขแล้ว (ตอนนี้อ้างอิงปัญหาเดียวกันใน GitHub)
David Clarke

ดูเหมือนว่ามันจะทำงานสำหรับโมดูลและแพ็คเกจ แต่ไม่ใช่ชื่อคลาส
Ian A. Mason

17

เนื่องจากนี่เป็นผลลัพธ์อันดับต้น ๆ ใน google และมันทำให้ฉันรู้สึกว่าคุณต้องเพิกเฉยต่อคำเตือนในไฟล์ทั้งหมด:

ปัญหาได้รับการแก้ไขจริงในแหล่งที่มาของ pylint / astroid เมื่อเดือนที่แล้วhttps://bitbucket.org/logilab/astroid/commits/83d78af4866be5818f193360c78185e1008fd29e แต่ยังไม่ได้อยู่ในแพ็คเกจของ Ubuntu

เพื่อให้ได้มาเพียงแค่

hg clone https://bitbucket.org/logilab/pylint/
hg clone https://bitbucket.org/logilab/astroid
mkdir logilab && touch logilab/__init__.py
hg clone http://hg.logilab.org/logilab/common logilab/common
cd pylint && python setup.py install

โดยขั้นตอนสุดท้ายนั้นมักจะต้องการsudoและแน่นอนว่าคุณต้องมี Mercurial ในการโคลน


ฉันจะบอกว่าคุณไม่จำเป็นต้องโคลน logilab ใหม่ / common แต่คุณต้องติดตั้ง logilab / astroid ใหม่ โดยการติดตั้ง logilab / astroid และ logilab / pylint อีกครั้งจะช่วยแก้ไขข้อบกพร่องสำหรับฉัน
paugier

7
คุณใช้เวอร์ชั่นไหน? ฉันใช้ astroid 1.3.2 และ pylint 1.4.0 และฉันยังคงพบปัญหากับรหัสนี้ from numpy import ceilส่งผลให้E: 1, 0: No name 'ceil' in module 'numpy' (no-name-in-module) ฉันตรวจสอบการกระทำที่อ้างถึงข้างต้นและปรากฏว่าการเปลี่ยนแปลงเหล่านั้นอยู่ในรุ่นของ astroid ฉันมี
Zach Dwiel

2
ทำตามที่แนะนำใน Xubuntu 14.04 และสิ่งนี้ส่งผลให้ pylint ที่ไม่ทำงาน: py2.7.egg / pylint / lint.py ", บรรทัด 866, ใน check_astroid_module astroid.close () AttributeError: 'โมดูล' ไม่มีแอตทริบิวต์ ' ปิด '
bli

3
บางทีนี่อาจเป็นการถดถอย - ดูเหมือนว่าจะมีการวางจำหน่ายเพื่อแก้ไขปัญหา ไม่ว่าจะด้วยวิธีใดฉันได้เปิดปัญหาใหม่เกี่ยวกับเรื่องนี้ที่bitbucket.org/logilab/pylint/issue/453/…
dstromberg

4
เห็นได้ชัดว่านี่ยังไม่ได้รับการแก้ไขใน pylint 1.4.2, astroid 1.3.4: Module 'numpy' has no 'zeros' member (no-member)
Bill

12

สำหรับการละเว้นข้อผิดพลาดทั้งหมดที่สร้างโดยแอตทริบิวต์ของ numpy.core เราสามารถใช้:

$ pylint a.py --generated-members=numpy.*

ในฐานะโซลูชันอื่นให้เพิ่มตัวเลือกนี้ในไฟล์~ / .pylintrcหรือ/ etc / pylintrc :

[TYPECHECK]

# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=numpy.*

สำหรับที่กล่าวถึงในรหัสคำถามตอนนี้ดูเหมือนว่าจะซ้ำซ้อน แต่ก็ยังมีความสำคัญสำหรับโมดูลอื่น ๆ เช่น netifacesและอื่น ๆ


patsy.dmatricesฉันมีปัญหาเดียวกันเมื่อใช้ การเพิ่มgenerated-members=patsy.dmatricesแก้ไขปัญหาของฉัน
Jonas Dahlbæk

12

หากคุณไม่ต้องการเพิ่มการกำหนดค่าเพิ่มเติมโปรดเพิ่มรหัสนี้ในไฟล์กำหนดค่าของคุณแทน 'รายชื่อที่อนุญาต'

{
"python.linting.pylintArgs": ["--generate-members"],
}

9
คุณควรพูดถึงว่าสิ่งนี้ใช้เฉพาะกับรหัส VS
bers

มันจะส่งออกpylint: error: no such option: --generate-members
ยานอวกาศ

8

มีข้อผิดพลาดหลายอย่างที่รายงานเกี่ยวกับเรื่องนี้ในช่วงไม่กี่ปีที่ผ่านมาเช่นhttps://bitbucket.org/logilab/pylint/issue/58/false-positive-no-member-on-numpy-imports

ฉันขอแนะนำให้ปิดการใช้งานสำหรับบรรทัดที่มีการร้องเรียนเกิดขึ้น

# pylint: disable=E1103
print np.zeros([1, 4])
# pylint: enable=E1103

10
ฉันใช้จำนวนมากจนฉันอาจปิดการใช้งานการไม่เช็คอินสมาชิกในไฟล์ทั้งหมด แต่ฉันต้องการหลีกเลี่ยงการทำเช่นนั้น
Alphadelta14

2
-1 เพียงเพราะคำตอบของ @ bijancn ควรจะแทนที่สิ่งนี้
LondonRob

@ LondonRob มันไม่ได้คิดว่า ปัญหายังคงมีอยู่ใน 1.4.2 ทางออกของ paduwan นั้นดีกว่าโดยไม่ต้องเพิ่ม cruft แฮ็คเข้าไปในโค้ดของคุณ
naught101

7

อาจจะสับสนกับวิธีการนำเข้าของวิธีการที่ลึกซึ้งของ numpy กล่าวคือzerosในความเป็นจริงnumpy.core.multiarray.zerosที่นำเข้าใน numpy ด้วยกับคำสั่ง

from .core import *

ในทางกลับกันนำเข้าด้วย

from .numeric import *

และเป็นตัวเลขคุณจะพบ

zeros = multiarray.zeros

ฉันเดาว่าฉันจะสับสนแทน PyLint!

ดูข้อบกพร่องนี้สำหรับมุมมองด้าน PyLint


ฉันหวังว่าฉันจะสามารถนำเข้าวิธีการเดียวแบบนั้นได้ แต่ฉันใช้ฟังก์ชั่นมากเกินไปและมันจะทำให้การนำเข้าเป็นเรื่องใหญ่
Alphadelta14

@ Alphadelta14 มันจะเป็นเรื่องยุ่งเหยิงอย่างยิ่งที่จะพบพวกเขาทั้งหมด ดูข้อเสนอแนะในลิงค์ท้ายคำตอบของฉัน
alko

2
ลิงก์นั้นทำให้ PyLint ไม่สนใจการนำเข้าบางโมดูล ฉันไม่แน่ใจว่ามันจะทำให้มันระงับข้อผิดพลาดที่ไม่มีสมาชิกสำหรับไฟล์เหล่านั้น ฉันยังต้องการหลีกเลี่ยงการแก้ไข PyLint ของฉันหากเป็นไปได้
Alphadelta14

@ Alphadelta14 ฉันเดาว่าคุณควรรอแพทช์ไปยัง PyLint แล้ว
alko

4

ฉันต้องเพิ่มที่ด้านบนของไฟล์ใด ๆ ที่ฉันใช้จำนวนมาก

# To ignore numpy errors:
#     pylint: disable=E1101

ในกรณีที่บางคนใน eclipse ประสบปัญหากับ Pydev และ pylint ...


4

ในส่วนขยายไปยังคำตอบ j_hougs ตอนนี้คุณสามารถเพิ่มโมดูลที่เป็นปัญหาไปยังบรรทัดนี้ใน. pylintrc ซึ่งได้เตรียมไว้ว่างในการสร้าง:

extension-pkg-whitelist=numpy

คุณสามารถสร้างตัวอย่าง. pylintrc ได้โดยทำดังนี้

pylint --generate-rcfile > .pylintrc

แล้วแก้ไขบรรทัดที่กล่าวถึง



3

นี่เป็นวิธีแก้ปัญหาแบบหลอกที่ฉันพบสำหรับปัญหานี้

#pylint: disable=no-name-in-module
from numpy import array as np_array, transpose as np_transpose, \
      linspace as np_linspace, zeros as np_zeros
from numpy.random import uniform as random_uniform
#pylint: enable=no-name-in-module

จากนั้นในรหัสของคุณแทนการเรียกnumpyฟังก์ชั่นเป็นnp.arrayและnp.zerosและเพื่อที่คุณจะเขียนnp_array, np_zerosฯลฯ ข้อดีของวิธีนี้เมื่อเทียบกับวิธีการอื่น ๆ ข้อเสนอแนะในคำตอบอื่น ๆ :

  • pylint ปิดการใช้งาน / เปิดใช้งานถูก จำกัด ในพื้นที่ขนาดเล็กของรหัสของคุณ
  • นั่นหมายความว่าคุณไม่จำเป็นต้องล้อมรอบทุกบรรทัดเดียวที่มีการเรียกใช้ฟังก์ชัน numpy ด้วยคำสั่ง pylint
  • คุณไม่ได้ทำ pylint ปิดการใช้งานของข้อผิดพลาดสำหรับไฟล์ทั้งหมดของคุณซึ่งอาจปกปิดปัญหาอื่น ๆ ที่มีรหัสของคุณ

ข้อเสียที่ชัดเจนคือคุณต้องนำเข้าฟังก์ชั่นจำนวนมากที่คุณใช้อย่างชัดเจน วิธีการดังกล่าวสามารถอธิบายเพิ่มเติมได้ คุณสามารถกำหนดโมดูลของคุณเองเรียกมันว่าnumpy_importerดังต่อไปนี้

""" module: numpy_importer.py
       explicitely import numpy functions while avoiding pylint errors  
"""
#pylint: disable=unused-import
#pylint: disable=no-name-in-module
from numpy import array, transpose, zeros  #add all things you need  
from numpy.random import uniform as random_uniform
#pylint: enable=no-name-in-module

จากนั้นรหัสแอปพลิเคชันของคุณสามารถนำเข้าโมดูลนี้เท่านั้น (แทนจำนวน) เป็น

import numpy_importer as np 

และใช้ชื่อตามปกติ: np.zeros, np.arrayฯลฯ

ข้อได้เปรียบของการทำเช่นนี้คือคุณจะมีโมดูลเดียวซึ่งnumpyการนำเข้าที่เกี่ยวข้องทั้งหมดจะทำเพียงครั้งเดียวและจากนั้นคุณจะนำเข้ามันด้วยบรรทัดเดียวนั้นทุกที่ที่คุณต้องการ คุณยังต้องระวังที่numpy_importerจะไม่นำเข้าชื่อที่ไม่มีอยู่numpyเนื่องจากข้อผิดพลาดเหล่านั้นจะไม่ถูกตรวจจับโดย pylint


2

ฉันมีปัญหากับ numpy, scipy, sklearn, nipy ฯลฯ และฉันแก้ไขมันด้วยการห่อ epylint ดังนี้:

$ cat epylint.py

#!/usr/bin/python

"""
Synopsis: epylint wrapper that filters a bunch of false-positive warnings and errors
Author: DOHMATOB Elvis Dopgima <gmdopp@gmail.com> <elvis.dohmatob@inria.fr>

"""

import os
import sys
import re
from subprocess import Popen, STDOUT, PIPE

NUMPY_HAS_NO_MEMBER = re.compile("Module 'numpy(?:\..+)?' has no '.+' member")
SCIPY_HAS_NO_MEMBER = re.compile("Module 'scipy(?:\..+)?' has no '.+' member")
SCIPY_HAS_NO_MEMBER2 = re.compile("No name '.+' in module 'scipy(?:\..+)?'")
NIPY_HAS_NO_MEMBER = re.compile("Module 'nipy(?:\..+)?' has no '.+' member")
SK_ATTR_DEFINED_OUTSIDE_INIT = re.compile("Attribute '.+_' defined outside __init__")
REL_IMPORT_SHOULD_BE = re.compile("Relative import '.+', should be '.+")
REDEFINING_NAME_FROM_OUTER_SCOPE = re.compile("Redefining name '.+' from outer scope")

if __name__ == "__main__":
    basename = os.path.basename(sys.argv[1])
    for line in Popen(['epylint', sys.argv[1], '--disable=C,R,I'  # filter thesew arnings
                       ], stdout=PIPE, stderr=STDOUT, universal_newlines=True).stdout:
        if line.startswith("***********"):
            continue
        elif line.startswith("No config file found,"):
            continue
        elif "anomalous-backslash-in-string," in line:
            continue
        if NUMPY_HAS_NO_MEMBER.search(line):
            continue
        if SCIPY_HAS_NO_MEMBER.search(line):
            continue
        if SCIPY_HAS_NO_MEMBER2.search(line):
            continue
        if "Used * or ** magic" in line:
            continue
        if "No module named" in line and "_flymake" in line:
            continue
        if SK_ATTR_DEFINED_OUTSIDE_INIT.search(line):
            continue
        if "Access to a protected member" in line:
            continue
        if REL_IMPORT_SHOULD_BE.search(line):
            continue
        if REDEFINING_NAME_FROM_OUTER_SCOPE.search(line):
            continue
        if NIPY_HAS_NO_MEMBER.search(line):
            continue
        # XXX extend by adding more handles for false-positives here
        else:
            print line,

สคริปต์นี้ใช้งานเพียง epylint จากนั้นให้เอาต์พุตเพื่อกรองคำเตือนและข้อผิดพลาดที่เป็นเท็จ คุณสามารถขยายได้โดยการเพิ่มรายละเอียดเพิ่มเติม

หมายเหตุ: หากสิ่งนี้เกี่ยวข้องกับคุณคุณจะต้องแก้ไข pychechers.sh ของคุณเพื่อให้เป็นเช่นนี้

#!/bin/bash

epylint.py "$1" 2>/dev/null
pyflakes "$1"
pep8 --ignore=E221,E701,E202 --repeat "$1"
true

(แน่นอนคุณต้องทำให้ไฟล์ epylint.py ทำงานได้ก่อน)

นี่คือการเชื่อมโยงไป .emacs ฉันhttps://github.com/dohmatob/mydotemacs หวังว่านี่จะเป็นประโยชน์กับใครบางคน



2

วิธีนี้ใช้ได้ผลสำหรับฉัน

โดยทั่วไปไปที่เลือกไอคอนรูปเฟืองจากด้านล่างซ้าย => การตั้งค่า => การตั้งค่าพื้นที่ทำงาน => ส่วนขยาย => การกำหนดค่า Python => คลิกที่ Settings.json => เพิ่มสิ่งนี้ในไฟล์ "python.linting.pylintArgs": [" --extension-pkg-whitelist = numpy "] ฉันใช้ VS 1.27.2


2

ฉันมีปัญหาเดียวกันกับโมดูลที่แตกต่างกัน ( kivy.properties) ซึ่งเป็นห่อ C numpyโมดูลเช่น

เมื่อใช้ VSCode V1.38.0 โซลูชันที่ได้รับการยอมรับจะหยุดการขุยผ้าทั้งหมดสำหรับโครงการ ดังนั้นในขณะที่มันลบลบเท็จบวกแน่นอนno-name-in-moduleมันไม่ได้ปรับปรุงสถานการณ์

วิธีแก้ปัญหาที่ดีที่สุดสำหรับฉันคือใช้--ignored-modulesอาร์กิวเมนต์ในโมดูลที่ละเมิด ปัญหาคือผ่านการโต้แย้งใด ๆ ผ่านpython.linting.pylintArgsการลบการตั้งค่า VSCode เริ่มต้นดังนั้นคุณต้องตั้งค่าเหล่านั้นอีกครั้ง ที่ทิ้งฉันด้วยไฟล์ settings.json ต่อไปนี้:

{
    "python.pythonPath": "C:\\Python\\Python37\\python.exe",
    "python.linting.pylintEnabled": true,
    "python.linting.enabled": true,
    "python.linting.pylintArgs": [
        "--ignored-modules=kivy.properties",
        "--disable=all",
        "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode"
    ]
}

"python.linting.pylintArgs": ["--generate-members = kivy.properties"]
yee

1

คัดลอกวางเล็กน้อยจากคำตอบก่อนหน้าเพื่อสรุปสิ่งที่ทำงาน (อย่างน้อยสำหรับฉัน: debian-jessie)

  1. ในบางเวอร์ชั่นที่เก่ากว่าpylintมีปัญหาที่ทำให้ไม่สามารถทำงานกับ numpy (และแพ็คเกจอื่น ๆ ที่คล้ายกัน)

  2. ตอนนี้ปัญหาได้รับการแก้ไขแล้ว แต่แพ็กเกจ C ภายนอก (อินเทอร์เฟซหลามไปยังโค้ด C เหมือนนัม -) ถูกปิดใช้งานโดยค่าเริ่มต้นด้วยเหตุผลด้านความปลอดภัย

  3. คุณสามารถสร้างรายการสีขาวเพื่อให้การใช้พวกเขาในแฟ้มpylint~/.pylintrc

คำสั่งพื้นฐานที่จะเรียกใช้: # ONLY หากคุณยังไม่มีไฟล์. pylintrc ในบ้านของคุณ $ pylint --generate-rcfile> .pylintrc

จากนั้นเปิดไฟล์และเพิ่มแพ็กเกจที่คุณต้องการหลังจากextension-pkg-whitelist=คั่นด้วยเครื่องหมายจุลภาค คุณสามารถมีพฤติกรรมเดียวกันโดยใช้ตัวเลือก--extension-pkg-whitelist=numpyจากบรรทัดคำสั่ง

หากคุณไม่สนใจแพ็คเกจใน[TYPECHECK]ส่วนที่หมายความว่าpylintจะไม่แสดงข้อผิดพลาดที่เกี่ยวข้องกับแพ็คเกจดังกล่าว ในทางปฏิบัติpylintจะไม่บอกอะไรคุณเกี่ยวกับแพ็คเกจเหล่านั้น


0

ฉันทำงานเกี่ยวกับ patch เพื่อ pylint เพื่อแก้ไขปัญหากับสมาชิกแบบไดนามิกในไลบรารีเช่น numpy มันเพิ่มตัวเลือก "โมดูลแบบไดนามิก" ซึ่งบังคับให้ตรวจสอบว่ามีสมาชิกอยู่ในขณะใช้งานจริงหรือไม่โดยการนำเข้าโมดูลจริง ดูฉบับที่ 413 ใน logilab นอกจากนี้ยังมีคำขอดึงดูลิงค์ในหนึ่งในความคิดเห็น


นี่คือวิธีที่ pydev แก้ไขได้ (รายการพิเศษของโมดูลเพื่อตรวจสอบโหลด) มันทำงานยังไง
Epu

0

คำตอบอย่างรวดเร็ว: อัปเดต Pylint เป็น 1.7.1 (ใช้ conda-forge ที่ให้มา Pylint 1.7.1 หากคุณใช้ conda เพื่อจัดการแพ็คเกจ)

ฉันพบปัญหาที่คล้ายกันในpylint GitHub ที่นี่และมีคนตอบทุกอย่างที่ตกลงหลังจากอัปเดตเป็น 1.7.1


0

ฉันไม่แน่ใจว่านี่เป็นวิธีแก้ปัญหาหรือไม่ แต่ใน VSCode เมื่อฉันเขียนอย่างชัดเจนในการตั้งค่าผู้ใช้ของฉันเพื่อเปิดใช้งาน pylint โมดูลทั้งหมดได้รับการยอมรับ

{
    "python.linting.pep8Enabled": true,
    "python.linting.pylintEnabled": true
}

0

เมื่อเร็ว ๆ นี้ (เนื่องจากบางสิ่งเปลี่ยนไปใน spyder หรือ pylint หรือ?) ฉันได้รับข้อผิดพลาด E1101 ("ไม่มีสมาชิก") จากการวิเคราะห์รหัสคงที่ของ Spyder ที่มีต่อสัญลักษณ์ astropy.constants ไม่รู้ว่าทำไม

โซลูชันแบบง่าย ๆ ของฉันสำหรับผู้ใช้ทั้งหมดบนระบบ Linux หรือ Unix (Mac อาจคล้ายกัน) คือการสร้าง / etc / pylintrc ดังนี้:

[TYPECHECK]
ignored-modules=astropy.constants

แน่นอนว่าสิ่งนี้อาจถูกแทนที่ด้วยไฟล์ $ HOME / .pylintrc ส่วนตัว และฉันสามารถอัปเดตไฟล์ที่มีอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.