在要导入的文件中正确设置导入
Correctly setting imports in a file meant to be imported
我正在构建一个小型 Python 包。在 https://packaging.python.org/tutorials/packaging-projects/ 之后,我的文件结构如下:
pkg/
- src/
- pkg/
- __init__.py
- file.py
A 类、B 类等在 file.py
中定义
我已经在我的系统上安装了这个包。我现在可以做 import pkg.file
在翻译中,这很棒。但是,它使我可以访问 file.py 中不以 _ 开头的任何内容;包括存在于此文件中的所有导入、全局变量等。我对 pkg.file.ClassA 很满意;例如,pkg.file.itertools 或 pkg.file.PI 就不那么重要了。就是感觉不太干净
此处的最佳做法是什么?将 file.py 中的导入语句修改为 import itertools as _itertools
?初始化文件中的一些 pythonic 技巧?我想添加 from file import ClassA, ClassB
到它,但它对我来说似乎不是很干。此外,file.py 很容易在不久的将来被分成两个或更多文件。
好的,所以我想出了一个两阶段的过程:
- 在 file.py 的顶层设置
__all__ = ['ClassA', 'ClassB']
;
- 在 init.py 中添加
from .file import *
。
这样,在 ìmport pkg
上,我可以直接访问命名空间 pkg 中的 类。作为副作用,我对层次结构的扁平化感到非常满意!
pkg.file.whatever 仍然可以访问,这是一种很好的规避方式(为了清洁,如果有的话),但我可以忍受它。
我正在构建一个小型 Python 包。在 https://packaging.python.org/tutorials/packaging-projects/ 之后,我的文件结构如下:
pkg/
- src/
- pkg/
- __init__.py
- file.py
A 类、B 类等在 file.py
中定义我已经在我的系统上安装了这个包。我现在可以做 import pkg.file
在翻译中,这很棒。但是,它使我可以访问 file.py 中不以 _ 开头的任何内容;包括存在于此文件中的所有导入、全局变量等。我对 pkg.file.ClassA 很满意;例如,pkg.file.itertools 或 pkg.file.PI 就不那么重要了。就是感觉不太干净
此处的最佳做法是什么?将 file.py 中的导入语句修改为 import itertools as _itertools
?初始化文件中的一些 pythonic 技巧?我想添加 from file import ClassA, ClassB
到它,但它对我来说似乎不是很干。此外,file.py 很容易在不久的将来被分成两个或更多文件。
好的,所以我想出了一个两阶段的过程:
- 在 file.py 的顶层设置
__all__ = ['ClassA', 'ClassB']
; - 在 init.py 中添加
from .file import *
。
这样,在 ìmport pkg
上,我可以直接访问命名空间 pkg 中的 类。作为副作用,我对层次结构的扁平化感到非常满意!
pkg.file.whatever 仍然可以访问,这是一种很好的规避方式(为了清洁,如果有的话),但我可以忍受它。