PyLint, “Не могущий импортировать” ошибку - как установить PYTHONPATH?

Я заставил его работать, используя простой скрипт ruby, который использует API GitHub:

130
задан E.Z. 1 April 2015 в 08:46
поделиться

6 ответов

Я нашел хороший ответ от , https://sam.hooke.me/note/2019/01/call-python-script-from-pylint-init-hook / редактируют Ваш pylintrc и добавляют следующее в ведущем устройстве init-hook="import imp, os; from pylint.config import find_pylintrc; imp.load_source('import_hook', os.path.join(os.path.dirname(find_pylintrc()), 'import_hook.py'))"

1
ответ дан 24 November 2019 в 00:24
поделиться

Чтобы разъяснить ответ Калеба , сначала контракт - это место, где вы создаете WSDL , а затем можете создайте реализацию из этого, и, поскольку WSDL является вашим контрактом, он будет первым контрактом.

Последний контракт - это место, где WSDL создается из исходного кода или реализации, поэтому он, скорее всего, будет генерируется инструментом, а не созданным разработчиком.

Обновление:

Чтобы получить хорошее объяснение с кодом на Java, вы можете посмотреть это объяснение из документации Spring Web Services 1.5 .

Они будут обсуждать все «за» и «против», хотя они будут склонны к их подходу (который контракт прежде всего ). В любом случае, я думаю, что это хорошее объяснение.

\ Python26 \ Lib \ site-packages - это обычное место для размещения дополнительных пакетов, и оно обязательно будет на вашем пути к python. Если вы знаете, как создавать символические ссылки Windows или аналогичные (я не знаю!), Вы могли бы сделать это вместо этого. Здесь есть еще много вариантов : http://docs.python.org/install/index.html, включая возможность добавления sys.path с каталогом уровня пользователя вашего кода разработки, но в На практике я обычно просто символически привязываю свой локальный каталог разработки к пакетам сайтов - его копирование дает тот же эффект.

19
ответ дан 24 November 2019 в 00:24
поделиться

Может быть, вручную добавив каталог в PYTHONPATH?

sys.path.append(dirname)
1
ответ дан 24 November 2019 в 00:24
поделиться

Одно решение, которое я только что обнаружил, - это просто запустить PyLint для всего пакета, а не для одного файла. Каким-то образом ему удается найти импортированный модуль.

2
ответ дан 24 November 2019 в 00:24
поделиться

Мне известны два варианта.

Во-первых, измените переменную среды PYTHONPATH , чтобы включить каталог над вашим модулем.

В качестве альтернативы отредактируйте ~ / .pylintrc , чтобы включить каталог над вашим модулем, например:

[MASTER]
init-hook='import sys; sys.path.append("/path/to/root")'

(Или в другой версии pylint, init-hook требует, чтобы вы изменили [General] на [МАСТЕР])

Обе эти опции должны работать.

Надеюсь, что это поможет.

126
ответ дан 24 November 2019 в 00:24
поделиться

Попробуйте

if __name__ == '__main__':
    from [whatever the name of your package is] import one
else:
    import one

Обратите внимание, что в Python 3 синтаксис для части в предложении else будет

from .. import one

Если подумать, это, вероятно, не решит вашу конкретную проблему. Я неправильно понял вопрос и подумал, что two.py запускается как основной модуль, но это не так. И, учитывая различия в способах Python 2.6 (без импорта absolute_import из __ future __ ) и импорта дескрипторов Python 3.x, вам все равно не нужно делать это для Python 2.6, я не думай.

Тем не менее, если вы в конечном итоге переключитесь на Python 3 и планируете использовать модуль как модуль пакета, так и как отдельный сценарий внутри пакета, может быть хорошей идеей сохранить что-то вроде

if __name__ == '__main__':
    from [whatever the name of your package is] import one   # assuming the package is in the current working directory or a subdirectory of PYTHONPATH
else:
    from .. import one

в уме.

РЕДАКТИРОВАТЬ: А теперь о возможном решении вашей реальной проблемы. Либо запустите PyLint из каталога, содержащего ваш one модуль (возможно, через командную строку), либо поместите следующий код где-нибудь при запуске PyLint:

import os

olddir = os.getcwd()
os.chdir([path_of_directory_containing_module_one])
import one
os.chdir(olddir)

В принципе, в качестве альтернативы возиться с PYTHONPATH, просто сделайте убедитесь, что текущий рабочий каталог - это каталог, содержащий one.py , когда вы выполняете импорт.

(Глядя на ответ Брайана, вы, вероятно, могли бы присвоить предыдущий код init_hook , но если вы собираетесь это сделать, то можете просто добавить к sys.path ], что он делает, что немного более элегантно, чем мое решение.)

2
ответ дан 24 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: