super-lint(pylint) E0203(Access to member)이 왜나지?

3 분 소요

GithubAction에서만 발생한 에러 원인 찾기

찾아보거나 알게된 배경

상속받은 자식 클래스에서 부모 클래스의 속성을 사용했는데, 아래와 같은 에러가 났다고 하여서 실험해보았음.

src/path/abc.py:9:15: E0203: Access to member 'specific_variable' before its definition line 10 (access-member-before-definition)

요약

위 에러는 super linter 이미지에서 해당 의존성이 없어서 그랬음. ( custom-common-lib )


과정

  • 마침 이전에 super linter 로컬에서 돌릴려고 해보다가 만 것들이 있어서 아래 명령어로 테스트
    docker run -e RUN_LOCAL=true -e VALIDATE_ALL_CODEBASE=false -e VALIDATE_PYTHON_BLACK=false -e VALIDATE_PYTHON_FLAKE8=false -e VALIDATE_PYTHON_ISORT=false -e VALIDATE_PYTHON_MYPY=false -e VALIDATE_BASH=false -e VALIDATE_BASH_EXEC=false -e VALIDATE_MARKDOWN=false -e VALIDATE_JSCPD=false -e VALIDATE_GITLEAKS=false -e VALIDATE_OPENAPI=false -e IGNORE_GITIGNORED_FILES=true -e DEFAULT_BRANCH=develop -e VALIDATE_DOCKERFILE_HADOLINT=false -e VALIDATE_CSS=false -e VALIDATE_HTML=false -e VALIDATE_JAVASCRIPT_ES=false -e VALIDATE_JAVASCRIPT_STANDARD=false -v /Users/jihwankim/space/a_proejct:/tmp/lint ghcr.io/github/super-linter:v4.8.1
    
  • super linter docker에 기본 설치된 패키지 리스트
    pip3 list -v
    Package                           Version     Location                               Installer
    --------------------------------- ----------- -------------------------------------- ---------
    ansible-base                      2.10.14     /usr/local/lib/python3.9/site-packages pip
    ansible-lint                      5.1.3       /usr/local/lib/python3.9/site-packages pip
    appdirs                           1.4.4       /usr/local/lib/python3.9/site-packages pip
    argcomplete                       1.12.3      /usr/local/lib/python3.9/site-packages pip
    astroid                           2.8.0       /usr/local/lib/python3.9/site-packages pip
    attrs                             21.2.0      /usr/local/lib/python3.9/site-packages pip
    aws-sam-translator                1.38.0      /usr/local/lib/python3.9/site-packages pip
    backports.entry-points-selectable 1.1.0       /usr/local/lib/python3.9/site-packages pip
    black                             20.8b1      /usr/local/lib/python3.9/site-packages pip
    boto3                             1.18.48     /usr/local/lib/python3.9/site-packages pip
    botocore                          1.21.48     /usr/local/lib/python3.9/site-packages pip
    bracex                            2.1.1       /usr/local/lib/python3.9/site-packages pip
    cached-property                   1.5.2       /usr/local/lib/python3.9/site-packages pip
    certifi                           2021.5.30   /usr/local/lib/python3.9/site-packages pip
    cffi                              1.15.0rc1   /usr/local/lib/python3.9/site-packages pip
    cfn-lint                          0.54.2      /usr/local/lib/python3.9/site-packages pip
    chardet                           4.0.0       /usr/local/lib/python3.9/site-packages pip
    charset-normalizer                2.0.6       /usr/local/lib/python3.9/site-packages pip
    click                             7.1.2       /usr/local/lib/python3.9/site-packages pip
    colorama                          0.4.4       /usr/local/lib/python3.9/site-packages pip
    commonmark                        0.9.1       /usr/local/lib/python3.9/site-packages pip
    ConfigArgParse                    1.5.2       /usr/local/lib/python3.9/site-packages pip
    configparser                      5.0.2       /usr/local/lib/python3.9/site-packages pip
    connection-pool                   0.0.3       /usr/local/lib/python3.9/site-packages pip
    cpplint                           1.5.5       /usr/local/lib/python3.9/site-packages pip
    cryptography                      3.4.8       /usr/local/lib/python3.9/site-packages pip
    Cython                            0.29.24     /usr/local/lib/python3.9/site-packages pip
    datrie                            0.8.2       /usr/local/lib/python3.9/site-packages pip
    diff-cover                        6.4.1       /usr/local/lib/python3.9/site-packages pip
    distlib                           0.3.3       /usr/local/lib/python3.9/site-packages pip
    docutils                          0.17.1      /usr/local/lib/python3.9/site-packages pip
    enrich                            1.2.6       /usr/local/lib/python3.9/site-packages pip
    filelock                          3.1.0       /usr/local/lib/python3.9/site-packages pip
    flake8                            3.9.2       /usr/local/lib/python3.9/site-packages pip
    gitdb                             4.0.7       /usr/local/lib/python3.9/site-packages pip
    GitPython                         3.1.24      /usr/local/lib/python3.9/site-packages pip
    idna                              3.2         /usr/local/lib/python3.9/site-packages pip
    importlib-metadata                1.7.0       /usr/local/lib/python3.9/site-packages pip
    inflect                           5.3.0       /usr/local/lib/python3.9/site-packages pip
    iniconfig                         1.1.1       /usr/local/lib/python3.9/site-packages pip
    ipython-genutils                  0.2.0       /usr/local/lib/python3.9/site-packages pip
    isort                             5.9.3       /usr/local/lib/python3.9/site-packages pip
    Jinja2                            3.0.1       /usr/local/lib/python3.9/site-packages pip
    jinja2-pluralize                  0.3.0       /usr/local/lib/python3.9/site-packages pip
    jmespath                          0.10.0      /usr/local/lib/python3.9/site-packages pip
    jsonpatch                         1.32        /usr/local/lib/python3.9/site-packages pip
    jsonpointer                       2.1         /usr/local/lib/python3.9/site-packages pip
    jsonschema                        3.2.0       /usr/local/lib/python3.9/site-packages pip
    junit-xml                         1.9         /usr/local/lib/python3.9/site-packages pip
    jupyter-core                      4.8.1       /usr/local/lib/python3.9/site-packages pip
    kiwisolver                        1.3.2       /usr/local/lib/python3.9/site-packages pip
    lazy-object-proxy                 1.6.0       /usr/local/lib/python3.9/site-packages pip
    MarkupSafe                        2.0.1       /usr/local/lib/python3.9/site-packages pip
    mccabe                            0.6.1       /usr/local/lib/python3.9/site-packages pip
    mypy                              0.910       /usr/local/lib/python3.9/site-packages pip
    mypy-extensions                   0.4.3       /usr/local/lib/python3.9/site-packages pip
    nbformat                          5.1.3       /usr/local/lib/python3.9/site-packages pip
    networkx                          2.6.3       /usr/local/lib/python3.9/site-packages pip
    oyaml                             1.0         /usr/local/lib/python3.9/site-packages pip
    packaging                         21.0        /usr/local/lib/python3.9/site-packages pip
    pathspec                          0.9.0       /usr/local/lib/python3.9/site-packages pip
    pip                               21.2.4      /usr/local/lib/python3.9/site-packages pip
    pipenv                            2021.5.29   /usr/local/lib/python3.9/site-packages pip
    platformdirs                      2.4.0       /usr/local/lib/python3.9/site-packages pip
    pluggy                            1.0.0       /usr/local/lib/python3.9/site-packages pip
    psutil                            5.8.0       /usr/local/lib/python3.9/site-packages pip
    PuLP                              2.5.0       /usr/local/lib/python3.9/site-packages pip
    py                                1.10.0      /usr/local/lib/python3.9/site-packages pip
    pybind11                          2.7.1       /usr/local/lib/python3.9/site-packages pip
    pycodestyle                       2.7.0       /usr/local/lib/python3.9/site-packages pip
    pycparser                         2.20        /usr/local/lib/python3.9/site-packages pip
    pyflakes                          2.3.1       /usr/local/lib/python3.9/site-packages pip
    Pygments                          2.10.0      /usr/local/lib/python3.9/site-packages pip
    pylint                            2.11.1      /usr/local/lib/python3.9/site-packages pip
    pyparsing                         3.0.0rc1    /usr/local/lib/python3.9/site-packages pip
    pyrsistent                        0.18.0      /usr/local/lib/python3.9/site-packages pip
    pytest                            6.2.5       /usr/local/lib/python3.9/site-packages pip
    python-dateutil                   2.8.2       /usr/local/lib/python3.9/site-packages pip
    PyYAML                            5.4.1       /usr/local/lib/python3.9/site-packages pip
    ratelimiter                       1.2.0.post0 /usr/local/lib/python3.9/site-packages pip
    regex                             2021.9.24   /usr/local/lib/python3.9/site-packages pip
    requests                          2.26.0      /usr/local/lib/python3.9/site-packages pip
    rich                              10.11.0     /usr/local/lib/python3.9/site-packages pip
    ruamel.yaml                       0.17.16     /usr/local/lib/python3.9/site-packages pip
    ruamel.yaml.clib                  0.2.6       /usr/local/lib/python3.9/site-packages pip
    s3transfer                        0.5.0       /usr/local/lib/python3.9/site-packages pip
    setuptools                        57.5.0      /usr/local/lib/python3.9/site-packages pip
    six                               1.16.0      /usr/local/lib/python3.9/site-packages pip
    smart-open                        5.2.1       /usr/local/lib/python3.9/site-packages pip
    smmap                             4.0.0       /usr/local/lib/python3.9/site-packages pip
    snakefmt                          0.4.2       /usr/local/lib/python3.9/site-packages pip
    snakemake                         6.8.1       /usr/local/lib/python3.9/site-packages pip
    sqlfluff                          0.6.6       /usr/local/lib/python3.9/site-packages pip
    stopit                            1.1.2       /usr/local/lib/python3.9/site-packages pip
    tabulate                          0.8.9       /usr/local/lib/python3.9/site-packages pip
    tblib                             1.7.0       /usr/local/lib/python3.9/site-packages pip
    tenacity                          8.0.1       /usr/local/lib/python3.9/site-packages pip
    toml                              0.10.2      /usr/local/lib/python3.9/site-packages pip
    toposort                          1.6         /usr/local/lib/python3.9/site-packages pip
    traitlets                         5.1.0       /usr/local/lib/python3.9/site-packages pip
    typed-ast                         1.4.3       /usr/local/lib/python3.9/site-packages pip
    types-requests                    2.25.9      /usr/local/lib/python3.9/site-packages pip
    typing-extensions                 3.10.0.2    /usr/local/lib/python3.9/site-packages pip
    urllib3                           1.26.7      /usr/local/lib/python3.9/site-packages pip
    virtualenv                        20.8.1      /usr/local/lib/python3.9/site-packages pip
    virtualenv-clone                  0.5.7       /usr/local/lib/python3.9/site-packages pip
    wcmatch                           8.2         /usr/local/lib/python3.9/site-packages pip
    wheel                             0.37.0      /usr/local/lib/python3.9/site-packages pip
    wrapt                             1.12.1      /usr/local/lib/python3.9/site-packages pip
    xmltodict                         0.12.0      /usr/local/lib/python3.9/site-packages pip
    yamllint                          1.26.3      /usr/local/lib/python3.9/site-packages pip
    yq                                2.12.2      /usr/local/lib/python3.9/site-packages pip
    zipp                              3.5.0       /usr/local/lib/python3.9/site-packages pip
    
  • 린트를 돌릴 경우, custom-common-lib라이브러리가 존재하지 않으며, 의존성 미존재에 해당하는 결과가 출력됨. (specific_variable에 대해 E0203 에러가 발생)
  • 따라서, 로컬에 설치된 라이브러리들을 super lint docker를 띄울 때, 복사해서 넣어주고 테스트해보기로 결정.

    (여기는 쓰진 않았지만, 다른 뻘짓을 하며, venv를 임시로 세팅해놨는데, 해당 파일을 복사함)

  • 임시로 쓸 도커파일을 빌드
    FROM github/super-linter:v4.8.1
    
    COPY ./venv/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages
    
    docker build -t temp-super:latest -f Dockerfile2 .
    
  • 아래의 명령어로 다시 실행 ( 이미지만 변경 )
    docker run -e RUN_LOCAL=true -e VALIDATE_ALL_CODEBASE=false -e VALIDATE_PYTHON_BLACK=false -e VALIDATE_PYTHON_FLAKE8=false -e VALIDATE_PYTHON_ISORT=false -e VALIDATE_PYTHON_MYPY=false -e VALIDATE_BASH=false -e VALIDATE_BASH_EXEC=false -e VALIDATE_MARKDOWN=false -e VALIDATE_JSCPD=false -e VALIDATE_GITLEAKS=false -e VALIDATE_OPENAPI=false -e IGNORE_GITIGNORED_FILES=true -e DEFAULT_BRANCH=develop -e VALIDATE_DOCKERFILE_HADOLINT=false -e VALIDATE_CSS=false -e VALIDATE_HTML=false -e VALIDATE_JAVASCRIPT_ES=false -e VALIDATE_JAVASCRIPT_STANDARD=false -v /Users/jihwankim/space/a_project:/tmp/lint test-super:latest
    
  • 의존성이 존재해서 specific_variable에 대해 E0203 에러가 발생하지 않음