从父目录导入

2 投票
3 回答
2274 浏览
提问于 2025-04-16 01:24

我有这样的路径结构:

>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
> 

据我理解,如果我从主路径加载所有内容,这样是可以的,但我的目标是让多个应用共享一个配置文件。
我尝试在 app_1/__init__.py 中把父目录添加到 __path__,但没有任何变化。

我接下来的想法是使用符号链接,不过我并不太喜欢这个“解决方案”,所以如果你有其他的建议,我会非常感激!

提前谢谢你!

3 个回答

0

你可以调整一下你的 PYTHONPATH 环境变量,或者修改 sys.path。

1

如果你想在不每次都设置PYTHONPATH的情况下修改Python的搜索路径,可以在一个已经在Python路径上的目录里添加一个路径配置文件(.pth文件)。

这份文档详细说明了这个过程:http://docs.python.org/install/#inst-search-path

最简单的方法是把路径配置文件放到一个已经在Python路径中的目录里,通常是.../site-packages/目录。路径配置文件的扩展名是.pth,每一行必须包含一个单独的路径,这些路径会被添加到sys.path中。

1

根据模块文档,要想导入一个模块,它必须在你的PYTHONPATH环境变量中。你可以在程序中通过一些代码来修改这个变量,比如:

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

想了解更多信息,你可以查看修改Python的搜索路径,这个内容在安装Python模块的文档里。

撰写回答