Может импортировать пакет Python, но не его модули - PullRequest
1 голос
/ 15 марта 2019

Я пишу набор инструментов для сценариев и отладки, которые я упаковываю. Хотя я могу импортировать сам пакет, я получаю ModuleNotFoundError всякий раз, когда пытаюсь импортировать модули в пакете.

package_dir
│   README.md
│   setup.py   
│
└───package
│   │   __init__.py
│   │
│   └───utils
│       │   __init__.py
│       │   image_utils.py
│       │   ...
│   
└───...

Установка: использование python setup.py install, кажется, работает нормально, и я могу успешно import package

__ init__.py: Насколько я понимаю, мне не нужны файлы __init__.py, так как я использую python3.6, но я пробовал каждую комбинацию с и без __init__.py в пакете / и utils /, без каких-либо изменений в обстоятельствах. Независимо от конфигурации, import package работает, и я не могу импортировать какие-либо модули.

Как я импортирую: Я нахожусь в блокноте Jupyter вне структуры пакета, и я попробовал следующее:

import package (работает)

from package import utils (не работает: ImportError)

from package.utils import image_utils (не работает: ModuleNotFoundError)

from package.utils.image_utils import func (не работает: ModuleNotFoundError)

Я также попытался импортировать в __init__.py пакета, используя относительный импорт, но безуспешно. Я определенно не хочу использовать sys.path.insert () каждый раз, когда хочу использовать эти инструменты.

Я изучил учебники, документацию и переполнение стека. Кто-нибудь видит, чего мне не хватает?

1 Ответ

0 голосов
/ 12 апреля 2019

Я обнаружил, что предыдущая версия (без надлежащих файлов __init__.py во всех каталогах модулей или операторов импорта в __init__.py пакета) не позволяла распознать мою последнюю установку.

Чтобы исправить это, я сначала попытался удалить все файлы, созданные во время установки: python setup.py install --record installfiles.txt

Но на самом деле это не показывало мне все, что мне нужно было удалить.

  1. Я также удалил файлы сборки и кэшированные файлы в пакете: build /, package /, dist / и .egg-info / (а также все кэши)
  2. ЗатемЯ удалил пакет сайта: /anaconda3/envs/[env_name]/lib/python3.6/site-packages/[package_name]
  3. И удалил пакет из легко устанавливаемого .pth: / anaconda3 / envs/[env_name]/lib/python3.6/site-packages/easy_install.pth
  4. И .egg-info: /anaconda3/envs/[env_name]/lib/python3.6/site-packages/[имя-пакета] .egg-info

Это позволило мне правильно установить.Спасибо всем за помощь!

...