2010-07-16 5 views
2

У меня есть такая архитектура пути:импортирования из родительского каталога

>main_path/ 
    __init__.py 
    config/ 
     __init__.py 
     common.py 
    app_1/ 
     __init__.py 
     config.py 
     index.py 
> 

я хотел бы быть в состоянии сделать это в config.py:

>from main_path.config import common 
> 

Хотя это не работает. Python говорит мне:

> $> pwd 
..../main_path/app_1 
$> python index.py 
[...] 
ImportError: No module named main_path.config 
> 

Насколько я понимаю, это было бы возможно, если я загружен все вверх от main_path, хотя цель состоит в том, чтобы иметь несколько приложений с общим файлом конфигурации.
Я попытался добавить родительский каталог в __path__ в app_1/__init__ .py, но ничего не изменил.

Моим следующим шагом было бы иметь символическую ссылку, хотя мне не очень нравится это «решение», поэтому, если у вас есть идея помочь мне, это будет очень признательно!

Заранее благодарен!

ответ

1

В соответствии с Modules documentation модуль должен быть импортирован в переменную среды PYTHONPATH. Вы можете изменить это в вашей программе что-то вроде:

import sys 
sys.path.append('PATH_TO/config') 
import common 

Для получения дополнительной информации вы можете увидеть Modifying Python's Search Path в Installing Python Modules.

+0

Это сделало трюк, спасибо! – chouquette

+0

Если вы используете относительный импорт, вы также можете использовать 'import os; os.chdir ('PATH_TO/config') ', если вам это нравится. – JAB

0

Вы можете настроить переменную окружения PYTHONPATH или изменить sys.path.

1

Если вы хотите изменить путь поиска python без необходимости устанавливать PYTHONPATH каждый раз, вы можете добавить файл конфигурации пути (.pth файл) в каталог, который уже находится на пути python.

Этот документ описывает его в деталях: http://docs.python.org/install/#inst-search-path

Самый удобный способ, чтобы добавить файл конфигурации в путь к каталогу , который уже на пути в Python, обычно к .../сайт- пакеты/ . Файлы конфигурации пути имеют расширение .pth, и каждая строка должна содержать один путь, к которому будет добавлен к sys.path.

Смежные вопросы