我有一个click
项目,它在任何地方都不使用/需要Django,但在运行prospector
作为静态分析的一部分时抛出了这个奇怪的错误
命令
prospector -I __init__.py --strictness veryhigh --max-line-length 120 src/
错误
Line: 1
pylint: django-not-available / Django is not available on the PYTHONPATH
项目/代码中没有任何地方引用django。我对蟒蛇还很陌生,我是不是遗漏了什么特别的东西?
python版本:3.7
点数列表
apipkg 1.5
asn1crypto 1.2.0
astroid 2.3.2
atomicwrites 1.3.0
attrs 19.3.0
auger-python 0.1.35
bitmath 1.3.3.1
boto3 1.10.14
botocore 1.13.14
bravado 9.2.0
bravado-core 4.9.1
certifi 2019.9.11
cffi 1.13.2
chardet 3.0.4
click 6.7
colorama 0.4.1
coloredlogs 10.0
coverage 4.5.4
cryptography 2.3.1
deb-pkg-tools 4.5
docutils 0.15.2
dodgy 0.1.9
entrypoints 0.3
execnet 1.7.1
executor 21.3
fasteners 0.15
filelock 3.0.12
flake8 3.7.9
flake8-polyfill 1.0.2
funcsigs 1.0.2
future 0.18.2
humanfriendly 4.18
hvac 0.7.1
idna 2.5
importlib-metadata 0.23
isort 4.3.21
jmespath 0.9.4
jsonpointer 2.0
jsonschema 3.1.1
lazy-object-proxy 1.4.3
mando 0.6.4
mccabe 0.6.1
mock 3.0.5
monotonic 1.5
more-itertools 7.2.0
murl 0.5.1
packaging 19.2
pep8 1.7.1
pep8-naming 0.4.1
pip 19.3.1
pluggy 0.13.0
property-manager 2.3.1
prospector 1.1.7
py 1.8.0
pycodestyle 2.5.0
pycparser 2.19
pydocstyle 4.0.1
pyflakes 2.1.1
pylint 2.4.3
pylint-celery 0.3
pylint-django 2.0.10
pylint-flask 0.6
pylint-plugin-utils 0.6
pyparsing 2.4.4
pyrsistent 0.15.5
pytest 5.2.2
pytest-cache 1.0
pytest-cov 2.8.1
pytest-pep8 1.0.6
python-dateutil 2.6.1
python-debian 0.1.33
python-memcached 1.59
pytz 2019.3
PyYAML 5.1.2
radon 4.0.0
raven 6.9.0
requests 2.19.1
requirements-detector 0.6
rfc3987 1.3.8
customcli 0.1.dev27+g2b07461.d20191114
s3transfer 0.2.1
setoptconf 0.2.0
setuptools 41.6.0
simplejson 3.16.0
six 1.12.0
snowballstemmer 2.0.0
strict-rfc3339 0.7
swagger-spec-validator 2.4.3
toml 0.10.0
tox 3.14.0
tryagain 1.0
typed-ast 1.4.0
urllib3 1.23
verboselogs 1.7
virtualenv 16.7.7
wcwidth 0.1.7
webcolors 1.10
wheel 0.33.6
wrapt 1.11.2
zipp 0.6.0
正如我在评论中所说,我认为prospector和需求检测器有一个错误。
我只需在一个空的虚拟机中安装prospector 1.1.7就可以重现这个问题v:
$ pip freeze
astroid==2.2.5
dodgy==0.1.9
isort==4.3.21
lazy-object-proxy==1.4.3
mccabe==0.6.1
pep8-naming==0.4.1
prospector==1.1.7
pycodestyle==2.3.1
pydocstyle==4.0.1
pyflakes==1.6.0
pylint==2.3.1
pylint-celery==0.3
pylint-django==2.0.10
pylint-flask==0.6
pylint-plugin-utils==0.6
PyYAML==5.1.2
requirements-detector==0.6
setoptconf==0.2.0
six==1.13.0
snowballstemmer==2.0.0
typed-ast==1.4.0
wrapt==1.11.2
然后创建一个伪代码:
$ cat src/__init__.py
print('something')
当运行prospector时,我得到了相同的错误:
$ prospector src/
/home/sma/.pyenv/versions/3.7.3/envs/58918408_so/lib/python3.7/site-packages/pycodestyle.py:113: FutureWarning: Possible nested set at position 1
EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]')
Messages
========
src/__init__.py
Line: 1
pylint: django-not-available / Django is not available on the PYTHONPATH
Check Information
=================
Started: 2019-11-18 17:57:27.136877
Finished: 2019-11-18 17:57:27.301151
Time Taken: 0.16 seconds
Formatter: grouped
Profiles: default, no_doc_warnings, no_test_warnings, strictness_medium, strictness_high, strictness_veryhigh, no_member_warnings
Strictness: None
Libraries Used: django, flask, celery
Tools Run: dodgy, mccabe, pep8, profile-validator, pyflakes, pylint
Messages Found: 1
由于探矿者发行245和pylint-django PR 137,django成为了pylint-jango的额外附属。
但是在没有安装django的情况下运行它仍然会返回一条消息:
$ pylint --load-plugins pylint_django src
************* Module src
src/__init__.py:1:0: C0111: Missing module docstring (missing-docstring)
src/__init__.py:1:0: F5101: Django is not available on the PYTHONPATH (django-not-available)
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
我的猜测是,探矿者会捕捉到该消息,并在直接运行时返回,即使用依赖关系自动检测。
对我来说,这似乎是两个库之间的一个bug/集成问题,但需要一个项目的贡献者/维护者的确认。
否则@Thaveedu的一个解决方法是禁用依赖性自动检测,因为在您的情况下,您可能根本不关心django、flask或芹菜:
$ prospector --no-autodetect src/
/home/sma/.pyenv/versions/3.7.3/envs/58918408_so/lib/python3.7/site-packages/pycodestyle.py:113: FutureWarning: Possible nested set at position 1
EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]')
Check Information
=================
Started: 2019-11-18 18:07:30.662236
Finished: 2019-11-18 18:07:30.804708
Time Taken: 0.14 seconds
Formatter: grouped
Profiles: default, no_doc_warnings, no_test_warnings, strictness_medium, strictness_high, strictness_veryhigh, no_member_warnings
Strictness: None
Libraries Used:
Tools Run: dodgy, mccabe, pep8, profile-validator, pyflakes, pylint
Messages Found: 0
你有没有可能指定使用pylint-django?为了让pylint-django检查需要安装django的django代码,prospector文档表示,它通常不会自动检测项目的依赖项,但它表示可以使用关闭它们
prospector --no-autodetect
如果这有帮助,请告诉我。