【问题标题】:Correctly setting imports in a file meant to be imported在要导入的文件中正确设置导入
【发布时间】:2021-03-16 02:46:32
【问题描述】:

我正在构建一个小型 Python 包。在https://packaging.python.org/tutorials/packaging-projects/ 之后,我的文件结构如下:

pkg/
    - src/
        - pkg/
            - __init__.py
            - file.py

file.py 中定义了 ClassA、ClassB 等

我已经在我的系统上安装了这个包。我现在可以做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 很容易在不久的将来被分解成两个或更多文件。

【问题讨论】:

标签: python python-module


【解决方案1】:

好的,所以我想出了一个两阶段的过程:

  • 在file.py的顶层设置__all__ = ['ClassA', 'ClassB']
  • 在 init.py 中添加 from .file import *

这样,在ìmport pkg 上,我可以直接访问命名空间 pkg 中的类。作为副作用,我对这种层次结构的扁平化感到非常满意! pkg.file.whatever 仍然可以访问,这是一种很好的规避方法(如果有其他的话,为了清洁),但我可以忍受它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多