Как получить импорт X для импорта функций, классов и т. Д. При создании пакета? - PullRequest
0 голосов
/ 25 сентября 2019

При импорте популярной библиотеки, например >>> 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 голосов
/ 25 сентября 2019

Итак, давайте пройдемся по небольшой части numpy, которая, надеюсь, сделает это более понятным.

numpy main __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

...