Python 单击项目,"Django is not available on the PYTHONPATH "错误



我有一个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
经过调查,Propector支持Django、Celery和Flask,这意味着它会自动安装支持这些框架所需的Pylint插件。

你有没有可能指定使用pylint-django?为了让pylint-django检查需要安装django的django代码,prospector文档表示,它通常不会自动检测项目的依赖项,但它表示可以使用关闭它们

prospector --no-autodetect

如果这有帮助,请告诉我。

相关内容

最新更新