Python: ошибка импорта переменной - PullRequest
0 голосов
/ 14 января 2012

Я использую Eclipse / PyDev с Python2.7 для проекта в Django.В одном из моих приложений (скажем, app1) у меня есть переменные, определенные в models.py, которым назначены списки.Я не могу импортировать их в models.py другого приложения (скажем, app2).Скажем, проект называется projectName.

projectName / app1 / models.py

VARIABLE_NAME = (
    ('a', 'choice1'),
    ('b', 'choice2'),
)

projectName / app2 / models.py

from projectName.app1.models import VARIABLE_NAME

Я получаюошибка Eclipse of Unresolved Import: VARIABLE_NAME

Есть идеи?

Ответы [ 3 ]

1 голос
/ 14 января 2012

Я думаю, что происходит следующее:

1) Eclipse видит, что вы пытаетесь импортировать, но projectName не является пакетом (если вы не добавили его явно) в sys.path, так что это приятно и жаловаться вам.

2) проблема в том, что projectName не должно быть пакетом; по крайней мере пока. Согласно https://docs.djangoproject.com/en/dev/ref/django-admin/ говорится, что «Кроме того, manage.py ... помещает пакет вашего проекта в sys.path».

Таким образом, я бы проигнорировал «ошибку», хотя Eclipse технически верен, что вы не можете выполнить этот импорт. Смысл установки Django заключается в том, что когда вы делаете «python manage.py runserver», имя проекта будет фактически доступно, так что все хорошо. =)

1 голос
/ 15 января 2012

Нашел решение.Это проблема PYTHONPATH, как указывал yanxhang.В настройках Eclipse в разделе PyDev> Интерпретатор в нижнем окне System PYTHONPATH обязательно добавьте папку, которая является родительской для вашего projectName, и нажмите «Применить».Это позволяет projectName разрешать себя и всех своих дочерних элементов.

1 голос
/ 14 января 2012

API Eclipse от PyDev делает это и для меня. У него возникают проблемы с проверкой того, действительно ли из импорта в ... импортировать ... стиль импортируется в реальный импорт. Это выглядит нормально для меня. Когда вы запустите программу, она, скорее всего, будет работать. Если нет, то это скорее всего ошибка с вашей стороны.

...