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

Python click project, "Django is not available on the PYTHONPATH " error

我有一个 click 项目,它在任何地方都没有 use/need 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 

project/code 中的任何地方都没有引用 django。我是 python 的新手,我是不是漏掉了一些明显的东西?

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

经过一些调查,Propector supports Django, Celery and Flask,这意味着它会自动安装支持这些框架所需的 Pylint 插件。

你有没有指定使用pylint-django?为了 pylint-django to inspect Django code it requires Django to be installed, prospector docs 说明它通常不会自动检测您的项目的依赖项,但它说明您可以使用以下方法关闭它们:

prospector --no-autodetect

如果有帮助请告诉我。

正如我在评论中所说,我认为探矿者和 requirement-detector 存在错误。

我能够通过在一个空的 virtualenv 中安装 prospector 1.1.7 来重现该问题:

$ 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

因为 prospector issue 245 and pylint django PR 137 Django 成为 pylint-django 的额外依赖项。

但是运行它在没有安装django的情况下仍然return留言:

$ 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)

我的猜测是探矿者在 运行 时直接捕获该消息并 return 它,即依赖性自动检测。

对我来说,这似乎是两个库之间的 bug/integration 问题,但需要来自一个项目的 contributor/maintainer 的确认。

否则@Thaveedu 的解决方法是禁用依赖项自动检测,因为在您的情况下您可能根本不关心 django、flask 或 celery:

$ 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