在要导入的文件中正确设置导入

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 仍然可以访问,这是一种很好的规避方式(为了清洁,如果有的话),但我可以忍受它。