super-lint(pylint) E0203(Access to member)이 왜나지?
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-packagesdocker 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 에러가 발생하지 않음