django - Python点击项目, "Django is not available on the PYTHONPATH "错误

标签 django python-3.x static-analysis pylint python-click

我有一个 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 相当陌生,我在这里遗漏了一些明显的东西吗?

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

最佳答案

正如我在评论中所说,我认为探矿者和 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 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 245pylint django PR 137 Django 成为 pylint-django 的额外依赖项。

但是在没有安装 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)

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

对我来说,这似乎是两个库之间的错误/集成问题,但需要来自项目之一的贡献者/维护者的确认。

否则@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

关于django - Python点击项目, "Django is not available on the PYTHONPATH "错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58918408/

相关文章:

c# - 集合契约和线程

sql-server - 在 WHERE 子句中使用可为空的列

python - 'str' 对象不可调用,如何处理?

django-haystack - 将新字段添加到索引后更新索引导致错误

python - 如何将 some_time|timeuntil 与 Django 模板中的特定时间间隔进行比较?

python - 使用 python3 在文本文件中查找信息

python - 读取 Unicode 文件时出现 UnicodeDecodeError

swift - 如何对 SwiftLint 自定义规则使用正则表达式量词 * 和 +

django - ExtractYear 和 ExtractMonth 在 Django 中返回 None

python - 具有默认值的类属性和实例变量之间的区别