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