Pythonic способ изменить путь Python относительно текущего каталога - PullRequest
0 голосов
/ 27 сентября 2010

У меня есть проект, который имеет такую ​​структуру (много урезан, чтобы дать суть) ...

State_Editor/
    bin/
    state_editor/
        __init__.py
        main.py
        features/
            __init__.py
            # .py files
        io/
            __init__.py
            # .py files
        # etc.

Вы поняли идею.Теперь скажем, например, что foobar.py в features сделал это ... from state_editor.io.fileop import subInPath.Очевидно, State_Editor должен быть на пути.

Я читал о sys.path.append и файлах конфигурации пути, но я не уверен, как выполнить то, что мне нужно, или какой самый питонный способ это сделать.

Самая большая проблема в том, что я не знаю, как указать «один каталог вверх».Очевидно, это .., но я не уверен, как избежать интерпретации этого как строкового литерала.Например, если я сделаю sys.path.append('../'), он буквально добавит ../ к пути.

Итак, мой вопрос: какой самый "питонический" способ сделать это?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

В указанном вопросе вам нужны 2 начальные точки (модуль, содержащий импорт, был state_editor.features.foobar) Итак:

from ..io.fileop import SubInPath 

Полная документация:

http://docs.python.org/reference/simple_stmts.html#the-import-statement

1 голос
/ 27 сентября 2010

В достаточно недавних версиях Python «относительный импорт», рекомендованный @fseto, может быть лучшим (возможно, с from __future__ import absolute_import в верхней части вашего модуля).Для решения, совместимого с широким спектром версий Python, например,

import sys
import os
sys.path.append(os.path.abspath(os.pardir))
...