Python: импорт файла из родительской папки
... Теперь я знаю, что этот вопрос задан много раз, и я посмотрел на эти другие темы. До сих пор ничего не работало, используя sys.path.append('.'), Чтобы просто импортировать foo
У меня есть файл python, который хочет импортировать файл (то есть в родительский каталог). Можете ли вы помочь мне выяснить, как мой дочерний файл может успешно импортировать свой файл в родительский каталог. Я использую python 2.7
Структура подобна (каждый каталог также имеет в нем __ init __.py файл):
StockTracker/
__ Comp/
____ a.py
____ SubComp/
_____ _b.py
Внутри b.py я хотел бы импортировать a.py: Поэтому я пробовал все из следующих, но я все еще получаю сообщение об ошибке внутри b.py, говоря: "Нет такого модуля a"
import a
import .a
import Comp.a
import StockTracker.Comp.a
import os
import sys
sys.path.append('.')
import a
sys.path.remove('.')
Ответы
Ответ 1
from .. import a
Должен это сделать. Это будет работать только в последних версиях Python - с 2.6, я считаю [Edit: since 2.5].
Каждый уровень (Comp и Subcomp) также должен иметь файл __init__.py
для этого. Вы сказали, что они это делают.
Ответ 2
Когда пакеты структурированы в субпакеты (как и в звуковом пакете в примере), вы можете использовать абсолютный импорт для обозначения подмодулей братья и сестры. Например, если модуль sound.filters.vocoder должен используйте модуль эха в sound.effects package, он может использоваться из sound.effects import echo.
Начиная с Python 2.5, кроме того к неявному относительному импорту описанных выше, вы можете написать явный относительный импорт с из имени импорта импорта импорта импорта выражение. Эти прямые относительные импорт использует ведущие точки для обозначения текущий и родительский пакеты участвует в относительном импорте. Из например, модуль объемного звучания, вы может использовать:
from . import echo
from .. import formats
from ..filters import equalizer
Цитата отсюда http://docs.python.org/tutorial/modules.html#intra-package-references
Ответ 3
Если каталог Comp находится в переменной окружения PYTHONPATH, обычный старый
import a
будет работать.
Если вы используете Linux или OS X и запускаете свою программу из оболочки bash, вы можете выполнить ее с помощью
export PYTHONPATH=$PYTHONPATH:/path/to/Comp
Для Windows ознакомьтесь с этими ссылками:
EDIT:
Чтобы программно изменить путь, вы были на правильном пути в исходном вопросе. Вам просто нужно добавить родительский каталог вместо текущего каталога.
sys.path.append("..")
import a