Я запускаю PyLint изнутри Wing IDE на Windows. У меня есть подкаталог (пакет) в моем проекте, и внутри пакета я импортирую модуль с верхнего уровня, т.е.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Внутри у two.py
меня есть, import one
и это прекрасно работает во время выполнения, потому что каталог верхнего уровня (из которого myapp.py
запускается) находится в пути Python. Однако, когда я запускаю PyLint на two.py, он выдает ошибку:
F0401: Unable to import 'one'
Как это исправить?
~/.pylintrc
работал для меня на OSX, другой не работалexport PYTHONPATH
этоpylint
увидели (по крайней мере, в bash / zsh)Решение по изменению пути
init-hook
- это хорошо, но мне не нравится тот факт, что мне пришлось добавить туда абсолютный путь, так как в результате я не могу поделиться этим файлом pylintrc среди разработчиков проекта. Это решение, использующее относительный путь к файлу pylintrc, работает лучше для меня:Обратите внимание, что
pylint.config.PYLINTRC
также существует и имеет то же значение, что иfind_pylintrc()
.источник
.
(точка).app
), которую вы можете использоватьfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path - это список.
2) Иногда проблема в том, что sys.path не является вашим virtualenv.path, и вы хотите использовать pylint в вашем virtualenv.
3) Как и сказано, используйте init-hook (обратите внимание на 'и "синтаксический анализ pylint)
или
.. и
источник
pylint
в свой virtualenv согласно этому совету: plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
в вашей домашней папке.Проблема может быть решена путем настройки пути pylint под venv: $ cat .vscode / settings.json
источник
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
просто для полноты.The setting "python.pythonPath" defined in your settings.json is now deprecated.
если я удаляюpython.pythonPath
строку, она все еще работает.У вас есть пустой
__init__.py
файл в обоих каталогах, чтобы python знал, что каталоги являются модулями?Основная схема, когда вы не запускаете из папки (то есть, возможно, из Pylint, хотя я не использовал это):
Это то, как интерпретатор Python узнает о модуле без ссылки на текущий каталог, поэтому, если Pylint работает по своему собственному абсолютному пути, он сможет получить доступ
functions_etc.py
какtopdir.functions_etc
илиtopdir.subdir.other_functions
, если онtopdir
находится вPYTHONPATH
.ОБНОВЛЕНИЕ: Если проблема не в
__init__.py
файле, возможно просто попробуйте скопировать или переместить ваш модуль вc:\Python26\Lib\site-packages
- это обычное место для размещения дополнительных пакетов, и он обязательно будет в вашем pythonpath. Если вы знаете, как создавать символические ссылки Windows или аналогичные (я не знаю!), Вы можете сделать это вместо этого. Здесь есть еще много вариантов : http://docs.python.org/install/index.html , включая возможность добавления sys.path к каталогу пользовательского уровня вашего кода разработки, но на практике я обычно просто символически связываю мой локальный каталог разработки для пакетов сайта - копирование его имеет тот же эффект.источник
__init__.py
в обоих каталогах. Я думаю, что проблема в том, что верхний каталог НЕ находится в PYTHONPATH при запуске PyLint, и я не уверен, как это исправить.общий ответ на этот вопрос, который я нашел на этой странице, пожалуйста, не открыт, сайт ошибся
создать
.pylintrc
и добавитьисточник
Я не знаю, как это работает с WingIDE, но для использования PyLint с Geany я установил свою внешнюю команду на:
где% f - имя файла, а% d - путь. Может быть кому-то пригодится :)
источник
Мне пришлось обновить системную
PYTHONPATH
переменную, чтобы добавить мой путь к App Engine. В моем случае мне просто нужно было отредактировать мой~/.bashrc
файл и добавить следующую строку:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
На самом деле, я попытался установить
init-hook
первый, но это не помогло решить проблему во всей моей кодовой базе (не знаю почему). Как только я добавил его в системный путь (вероятно, хорошая идея в целом), мои проблемы исчезли.источник
Один из обходных путей, который я только что обнаружил, - это просто запустить PyLint для всего пакета, а не для одного файла. Каким-то образом удается найти импортированный модуль.
источник
pylint ... dir
из родительской папки. Это требует__init__.py
присутствия в каждой подпапке с.py
файлами.ПытатьсяОбратите внимание, что в Python 3 синтаксис для части в
else
предложении будетЕсли подумать, это, вероятно, не решит вашу конкретную проблему. Я неправильно понял вопрос и подумал, что two.py запускается как основной модуль, но это не так. И учитывая различия в способе Python 2.6 (без импорта
absolute_import
из__future__
) и Python 3.x, в любом случае вам не понадобится делать это для Python 2.6, я не думаю.Тем не менее, если вы в конечном итоге переключитесь на Python 3 и планируете использовать модуль как пакетный модуль и как отдельный скрипт внутри пакета, возможно, будет хорошей идеей сохранить что-то вроде
в уме.
РЕДАКТИРОВАТЬ: И теперь для возможного решения вашей актуальной проблемы. Либо запустите PyLint из каталога, содержащего ваш
one
модуль (возможно, из командной строки), либо поместите следующий код где-нибудь при запуске PyLint:В основном, в качестве альтернативы возни с PYTHONPATH, просто убедитесь, что текущий рабочий каталог - это каталог, содержащий
one.py
при выполнении импорта.(Глядя на ответ Брайана, вы, вероятно, могли бы присвоить предыдущий код
init_hook
, но если вы собираетесь это сделать, то можете просто добавить к немуsys.path
то, что он делает, что несколько элегантнее, чем мое решение.)источник
Ключ должен добавить каталог вашего проекта в
sys.path
без учета переменной env.Для тех, кто использует VSCode, вот решение для одной строки, если есть базовый каталог вашего проекта:
Позвольте мне объяснить это немного:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: найти базовый каталог в соответствии с файлом редактированияos.path.join(os.getcwd(), base_dir)
: добавить,cwd
чтобыsys.path
соответствовать среде командной строкиК вашему сведению, вот мой .pylintrc:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
источник
У меня была та же проблема, и я исправил ее, установив pylint в моем virtualenv, а затем добавив файл .pylintrc в каталог моего проекта, добавив в него следующее:
источник
Может быть, вручную добавив dir в PYTHONPATH?
источник
У меня была такая же проблема, и так как я не мог найти ответ, я надеюсь, что это может помочь любому с подобной проблемой.
Я использую мухи с эпилинтом. По сути, я добавил хук dired-mode, который проверял, является ли каталог dired каталогом пакета python. Если это так, я добавляю его в PYTHONPATH. В моем случае я считаю каталог пакетом Python, если он содержит файл с именем «setup.py».
Надеюсь это поможет.
источник
Если кто-то ищет способ запустить Pylint как внешний инструмент в PyCharm и заставить его работать со своими виртуальными средами (почему я пришел к этому вопросу), вот как я решил это:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Теперь использование pylint в качестве внешнего инструмента будет запускать pylint в любом каталоге, который вы выбрали, используя общий файл конфигурации, и использовать любой интерпретатор, настроенный для вашего проекта (который, вероятно, является вашим интерпретатором virtualenv).
источник
Это старый вопрос, но нет принятого ответа, поэтому я предлагаю: измените оператор импорта в two.py, чтобы он читался так:
В моей текущей среде (Python 3.6, VSCode с использованием pylint 2.3.1) это очищает помеченный оператор.
источник
Я нашел хороший ответ . Отредактируйте ваш pylintrc и добавьте следующее в master
источник
Когда вы устанавливаете Python, вы можете настроить путь. Если путь уже определен, то, что вы можете сделать, находится в VS Code, нажмите Ctrl + Shift + P и введите Python: выберите Interpreter и выберите обновленную версию Python. Перейдите по этой ссылке для получения дополнительной информации, https://code.visualstudio.com/docs/python/environments
источник
если вы используете vscode, убедитесь, что каталог вашего пакета находится вне каталога _pychache__.
источник
Если вы используете Cython в Linux, я решил удалить
module.cpython-XXm-X-linux-gnu.so
файлы из целевой директории моего проекта.источник
просто добавьте этот код в файл .vscode / settings.json
, "python.linting.pylintPath": "venv / bin / pylint"
Это сообщит местоположение pylint (который является средством проверки ошибок для python)
источник
Здравствуйте, я смог импортировать пакеты из другого каталога. Я просто сделал следующее: Примечание: я использую VScode
Шаги для создания пакета Python Работать с пакетами Python действительно просто. Все, что вам нужно сделать, это:
Создайте каталог и дайте ему имя вашего пакета. Поместите свои классы в это. Создайте файл init .py в каталоге
Например: у вас есть папка с именем Framework, в которой вы храните все пользовательские классы, и ваша задача - просто создать файл init .py внутри папки с именем Framework.
И при импорте нужно импортировать таким образом --->
из базы импорта Framework
ошибка E0401 исчезает. Framework - это папка, в которой вы только что создали init .py, а base - ваш пользовательский модуль, в который вы должны импортировать и работать над ним. Надеюсь, это поможет !!!!
источник