Как импортировать используя путь верхнего уровня в Python? - PullRequest
1 голос
/ 20 мая 2011

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

Моя текущая структура выглядит так:

myapp/
  config.py
  docs/
  framework/
    main.py
    utils.py
  file.py
  lib/
    some_module.py
  unit_tests/
    test_utils.py

Я хочу иметь возможность использовать следующий импорт в файлах Python в lib и unit_tests следующим образом:

from myapp.framework import utils

Есть ли простой способ сделать это? Я пытался делать хаки sys.path.append (), но они на самом деле не работают. Если есть действительно питонский способ добиться этого, я не против пойти на все, чтобы заставить его работать.

РЕДАКТИРОВАТЬ: Ну, я снова попробовал sys.path.append (), и он на самом деле работает, но это действительно не элегантное решение, и я бы очень хотел услышать, есть ли другой способ.

1 Ответ

1 голос
/ 20 мая 2011

Для краткости: у вас не может быть двух модулей с одинаковым именем один внутри другого. У вас есть папка myapp и файл myapp.py

Это из-за порядка импорта модулей.

  1. Внутри текущего каталога
  2. Текущий пакет
  3. Глобальная папка пакета

Итак, если вы пытаетесь import myapp.lib.some_module в config.py, интерпретатор сначала увидит, что у вас есть myapp.py в той же папке, и буквально попытается импортировать lib.some_module из этого файла, который не существует .

Было бы что-то вроде попытки импортировать myapp.myapp.lib.some_module извне этого модуля.

Итак, лучше всего переименовать файл myapp.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...