组织python包避免相对导入

时间:2013-06-05 11:45:11

标签: python layout packages relative import

我正在构建一系列工具以及一个支持框架,我只是想要掌握Python中的包组织。

这是这样的:

main_package
- __init__.py
- foo.py
- constants.py
- lib_package
    - __init__.py
    - bar.py

我有一个问题,我有一个constants.py模块,我需要能够访问所有模块,无论是在主包或子包中。

我需要从foo和bar访问常量。我尝试过使用:

import main_package.constants

在我的lib包中的 init 内部,但它引起了一些其他的麻烦(有时我必须在不同的命名空间(main_package_dev)下运行整个包进行故障排除,这允许我保留两个网络上的版本,不会打扰现场项目。)

我也试过

from ..constants import *

但这不起作用,因为常量不是它自己的包。

我的问题是,维护一个包中使用的常量集合以及它的子包是什​​么是好的做法,如果它可能有它自己的包并且如何导入它?

1 个答案:

答案 0 :(得分:0)

假设我有这个文件夹结构..

包1     | _ init .py     | _ constants.py     | _ package2         | _ init .py         | _ constants.py

然后你可以添加

import os
import sys

sys.path.append(os.path.dirname(__file__))

在package1 / init .py

然后你可以做

from package1 import constansts as con1
from package1.package2 import constansts as con2