Проект щелчка Python, Django недоступен из-за ошибки 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, я что-то пропустил здесь?

версия 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

person Thaveedu    schedule 18.11.2019    source источник
comment
Попробуйте это: stackoverflow .com/questions/35548720/   -  person Epikstar    schedule 18.11.2019
comment
@Epikstar думаю, я не думаю, что старатель вообще должен искать здесь django, он устанавливает pylint-django, который объявляет django только как дополнительно. Я воспроизвел ошибку, просто установив Prospector 1.1.7 и попытавшись запустить его с фиктивным кодом. А сами pylint и pylint-django работают без установленного django. Так что мне кажется, что это ошибка в старателе, кажется, он проверяет django, даже если вы его не объявляли.   -  person lee-pai-long    schedule 18.11.2019


Ответы (2)


Как я уже сказал в своих комментариях, я думаю, что есть ошибка с проспектором и requirement-detector.

Я смог воспроизвести проблему, просто установив 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

Поскольку выпуск 245 и pylint 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 или сельдерей:

$ 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
person lee-pai-long    schedule 18.11.2019
comment
Спасибо за их воспроизведение. Я заметил одну странную вещь: этот проект новый, в то время как старые проекты отлично работают с той же версией prospector. - person Thaveedu; 18.11.2019
comment
Странно, вы уверены, что это одна и та же версия prospector и pylint-django и что вы не устанавливали django напрямую с более старой версией pylint-django? - person lee-pai-long; 18.11.2019
comment
Этот обходной путь работал с флагом --no-autodetect, хотя я не знаю, как старые проекты отлично работали без этого флага. - person Thaveedu; 22.11.2019

После некоторого изучения Proptor поддерживает Django, Celery и Flask, что означает, что он автоматически устанавливает Pylint. плагины, необходимые для поддержки этих фреймворков.

Возможно ли, что вы указали использовать pylint-django? Чтобы pylint-django мог проверять код Django, требуется, чтобы Django был установлен, исследователь docs говорится, что обычно он не определяет автоматически зависимости вашего проекта, но вы можете отключить их, используя:

prospector --no-autodetect

Позвольте мне знать, если это помогает.

person Shan-mk    schedule 18.11.2019
comment
Удаление pylint-django дает ошибку pkg_resources.DistributionNotFound: The 'pylint-django==2.0.10' distribution was not found and is required by prospector, а pylint-django объявляет только django как дополнительную. Пытаясь воспроизвести это, я смог без проблем запустить pylint, но не проспектор. - person lee-pai-long; 18.11.2019
comment
Я изучаю это больше, salsa.debian.org/python-team/modules /pylint-django указывает, что pylint-django является зависимостью для старатель. Позвольте мне изменить свой ответ. - person Shan-mk; 18.11.2019