Python импорт и пакеты: файл __init__.py не исправляет ModuleNotFoundError? - PullRequest
0 голосов
/ 17 апреля 2020

Итак, я прочитал документацию Packages и включил файлы __init__.py в каждый пакет и родительский пакет. Мой каталог выглядит следующим образом

sparro
    __init__.py
    api
        __init__.py
        sparrolib.py
    schema
        __init__.py
        tsbuild.py
    scripts
        __init__.py
        scrape_descriptors.py
    utils
        __init__.py
        analytics.py
        engine.py
        utility.py

Поэтому я пытаюсь импортировать свои служебные модули в scrape_descriptors.py с

from sparro.utils import utility, engine

. Сбой и дает мне ModuleNotFoundError . Я пробую это с другими модулями, и я получаю ту же проблему. Что я неправильно понимаю и как это исправить?

Ошибка:

Traceback (most recent call last):
  File "/Users/dominictarro/Documents/Sparro/sparro/scripts/scrape_descriptors.py", line 2, in <module>
from sparro.utils import utility, engine
ModuleNotFoundError: No module name 'sparro'
[shell_cmd: python -u "/Users/dominictarro/Documents/Sparro/sparro/scripts/scrape_descriptors.py"]
[dir: /Users/dominictarro/Documents/Sparro/sparro/scripts]
[path: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin]

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вам нужно добавить родительский каталог вашего пакета в вашу PYTHONPATH.

Выполнить следующую команду в терминале возвышенного:

export PYTHONPATH=$PYTHONPATH:/Users/dominictarro/Documents/Sparro/

Чтобы сделать это постоянный взгляд на то, как установить переменные среды для вашей системы. Если вы используете linux или macOS, то добавьте команду в свой файл .bashr c (вероятно, здесь /Users/dominictarro/.bashrc)

. Вы также можете узнать, как установите PYTHONPATH с помощью возвышенного.


В качестве альтернативы вам нужно вызвать код, пока ваш рабочий каталог - / Users / dominictarro / Documents / Sparro /

Вы можете сделать это, создав файл здесь (по соглашению, называемый main.py), который импортирует и вызывает что-то в вашей библиотеке.

например,

from sparro.scripts.scrape_descriptors import run

if __name__ == '__main__':
    run()

Очевидно, потребуется функция с именем run там.

0 голосов
/ 17 апреля 2020

Отсутствующая часть находится в том же разделе учебного документа, на который есть ссылка в вопросе:

6.1.2. Путь поиска модуля

Оператор импорта в вашем коде выглядит правильно, однако каталог проекта верхнего уровня должен присутствовать в sys.path для того, чтобы этот оператор импорта был разрешен.

Это можно сделать, например, установив переменную среды PYTHONPATH в качестве родительского каталога подкаталога "sparro".

...