за ошибкой пакета верхнего уровня в относительном импорте

Похоже, что здесь уже есть некоторые вопросы относительно относительного импорта в python 3, но после прохождения многих из них я все еще не нашел ответа на вопрос. так вот вопрос.

У меня есть пакет, показанный ниже.

package/ __init__.py A/ __init__.py foo.py test_A/ __init__.py test.py 

и у меня есть одна строка в test.py:

 from ..A import foo 

теперь я в папке package , и я запускаю

 python -m test_A.test 

Я получил сообщение

 "ValueError: attempted relative import beyond top-level package" 

но если я в родительской папке package , например, я запускаю:

 cd .. python -m package.test_A.test 

Все отлично.

теперь мой вопрос: когда я в папке package , и я запускаю модуль внутри субпакета test_A как test_A.test , исходя из моего понимания, ..A поднимается только на один уровень, который все еще находится в package папка, почему она дает сообщение beyond top-level package . Как именно причина, вызывающая это сообщение об ошибке?

2 Solutions collect form web for “за ошибкой пакета верхнего уровня в относительном импорте”

Предположение:
Если вы находитесь в каталоге package , A и test_A являются отдельными пакетами.

Вывод:
Импорт ..A только внутри пакета.

Дальнейшие примечания:
Сделать относительный импорт доступен только в пакетах, полезно, если вы хотите заставить эти пакеты размещаться на любом пути, расположенном на sys.path .

 import sys sys.path.append("..") # Adds higher directory to python modules path. 

Попробуй это. Работал для меня.

  • Абсолютный и явный относительный импорт модуля Python
  • Почему «импортировать модуль», а затем «из модуля импорта пакетов» загружает модуль снова?
  • Скопированный пакет не может быть получен
  • Python: что предпочитает «импорт» - модули или пакеты?
  • python: два модуля и классы с одинаковым именем в разных пакетах
  • Пакетная программа * и * динамически загружаемые файлы в один исполняемый файл? (python + pygame или языковой агностик)
  • Тесты и структура пакета python
  • Стандартный способ встраивания версии в пакет python?
  • Пусть sphinx использует версию из setup.py
  • Добавление кода в __init__.py
  • Как найти все дочерние модули в Python?
  • Python - лучший язык программирования в мире.