以Pythonic的方式修改当前目录相对的Python路径

0 投票
2 回答
1083 浏览
提问于 2025-04-16 04:37

我有一个项目,结构大致是这样的(为了简化内容,省略了一些细节)...

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

你大概明白了。假设在 features 文件夹里的 foobar.py 文件中这样写了:from state_editor.io.fileop import subInPath。显然,State_Editor 这个文件夹需要在路径中。

我看过关于 sys.path.append 和路径配置文件的资料,但我不太确定该怎么做才能实现我的需求,或者说最符合 Python 风格的做法是什么。

最大的问题是我不知道怎么指定“上一级目录”。显然,这个是 ..,但我不太确定怎么避免它被当作字符串字面量来处理。例如,如果我写 sys.path.append('../'),它会直接把 ../ 加到路径里。

所以我的问题是,最“Python 风格”的做法是什么呢?

2 个回答

1

在最近的Python版本中,@fseto推荐的“相对导入”可能是最好的选择(也许在你的模块顶部加一句from __future__ import absolute_import)。如果你想要一个兼容更多Python版本的解决方案,比如:

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

在这个问题中,你需要用两个点开头(这个模块的路径是 state_editor.features.foobar)。所以:

from ..io.fileop import SubInPath 

完整文档:

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

撰写回答