Python: как импортировать переменную из одного более высокого каталога? - PullRequest
0 голосов
/ 21 ноября 2018

Как мне импортировать из каталога более высокого уровня в Python?

Например, у меня есть:

/var/www/PROJECT/subproject/_common.py 
/var/www/PROJECT/subproject/stuff/routes.py

Я хочу импортировать переменную A в _common.py в routes.py

# routes.py

import os, sys   
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from _common import A

, но я получаюошибка:

ImportError:cannot import name 'A'

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Изменить каталог файлов:

import os, sys   
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),"../../project")))
from _common import A
0 голосов
/ 21 ноября 2018

СТАРНАЯ ВЕРСИЯ

Для решения проблемы замените ".." на os.pardir:

import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)))
from _common import A

НОВАЯ ВЕРСИЯ

Приведенный выше код не решает проблему в вопросе, потому что настоящая проблема заключается в структуре проекта, а не в конкретной строке.Проблема в круговом импорте .Проблема стала ясной после полного отслеживания.Вот простой способ воспроизвести проблему - рассмотрим 3 файла ...

main.py:

import a

a.py:

import b
A = 'A'

b.py:

from a import A

... ошибка:

ImportError: cannot import name 'A'

ИЛИ

b.py:

import a
BB = a.A

...ошибка:

AttributeError: module 'a' has no attribute 'A'

Решение проблемы обсуждалось много раз - поиск по SO

...