构造包时如何获取import X来导入函数,类等?

时间:2019-09-25 15:33:41

标签: python package python-import python-module setup.py

在导入流行的库(例如>>> import numpy,然后再导入>>> help(numpy))时,会提供大量的类和函数。

这是我包裹的结构:

Blur/
├── __init__.py
├── blur
│   ├── __init__.py
│   ├── blur.py
│   ├── funcs
│   │   ├── __init__.py
│   │   └── funcs.py
│   ├── scripts
│   │   ├── __init__.py
│   │   └── blur_script.py
│   ├── tests
│   └── utils
│       ├── __init__.py
│       └── timer.py
└── setup.py

我先做>>> import blur,然后再做>>> help(blur),我明白了:

NAME
    blur

PACKAGE CONTENTS
    blur
    funcs (package)
    scripts (package)
    utils (package)

FILE
    /Users/admin/Documents/Studie/IN3110/assignment4/Blur/blur/__init__.py

我希望import blur导入blur.py模块及其功能和类。如果要导入blur.py,则必须编写import blur.blur。认为这有点丑陋,不是吗?仅import blur怎么办?

1 个答案:

答案 0 :(得分:0)

因此,让我们沿着numpy的一小部分走下去,希望可以使这变得更容易理解。

numpy主__init__.py code

from . import polynomial

因此,这意味着在.的同一文件夹中进行相对导入(我们从polynomial知道)。因此在实践中,这会将模块名称放入我们通过以下操作知道的名称空间:

>>> 'polynomial' in dir(numpy)
True

命名空间中的最终结果大部分是基于模块名称和顶级程序包的。因此,在这种情况下,使用numpy引入了每个导入,以构成可用功能/等等的庞大列表。​​


查看所有这些导入语句:

    from . import _distributor_init

    from . import core
    from .core import *
    from . import compat
    from . import lib
    # FIXME: why have numpy.lib if everything is imported here??
    from .lib import *

    from . import linalg
    from . import fft
    from . import polynomial
    from . import random
    from . import ctypeslib
    from . import ma
    from . import matrixlib as _mat
    from .matrixlib import *
    from .compat import long

如果愿意,您可以遍历并收集所有这些名称,以及任何*中的所有内容,最终您将在numpy

中添加所有可用功能。