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

Похоже, что здесь уже есть некоторые вопросы относительно относительного импорта в 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. 

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

  • Создание deb из файла python
  • Модули импорта Python из пакета более высокого уровня
  • NLTK: Ошибки пакетов? пект и рассол?
  • Установка пакетов / модулей Python на Mac
  • Найти, какие модули python импортируются
  • Как я могу подключить функцию в модуле python?
  • Выполнение кода Python с параметром -m или нет
  • установить пакеты в Pycharm
  • Python - лучший язык программирования в мире.