Python, импортировать модуль по папке - PullRequest
0 голосов
/ 19 июля 2011

Я хочу знать, как импортировать файл на один уровень выше.Я прочитал в Google это:

>>> sys.path.append("../")

Но мне это не нравится, и я надеюсь, что есть лучшее решение

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

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

from .. import foo

, где foo - имя модуля, который вы пытаетесь импортировать.

Точно так же, если у вас есть другой модуль в текущем каталоге, вы можете использовать:

from . import bar

К сожалению (или, возможно, не так печально), однако, это не расширяетсядальше, чем это.Вы не можете подняться к бабушке и дедушке или выше.

РЕДАКТИРОВАТЬ :

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

from ... sys import path

Обратите внимание, что, хотя этот последний случай является законным, он, безусловно, не рекомендуется (слово "безумный" использовалось Гвидо).

Я, должно быть, слишком усвоил описание Гвидо.; ^)

РЕДАКТИРОВАТЬ :

Хорошо, я только что проверил это в 2.7 - это, очевидно, идет так глубоко, как вам нравится, и зависит от числа .

from .... import greatgrandparent

отлично работает.Я думаю, мне понадобится ведро

0 голосов
/ 19 июля 2011

В зависимости от того, как организован ваш проект, вы можете импортировать его в обычном режиме. Допустим, структура вашего проекта выглядит следующим образом:

/tmp/test_prj/launcher.py
/tmp/test_prj/mymodule/__init__.py
/tmp/test_prj/mymodule/helper.py
/tmp/test_prj/mymodule/mysubmodule/__init__.py

Если вы используете модуль запуска (в данном случае launcher.py) и всегда вызываете свой проект с помощью ./launcher.py, вы можете импортировать helper.py внутри mysubmodule, используя следующую строку:

from mymodule import helper

Это работает, потому что ваш текущий рабочий каталог - /tmp/test_prj. Вы можете проверить это с помощью print sys.path, оно должно быть первым.

Дайте мне знать, если я не достаточно ясно: D

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