Документация по Python

Импорт модулей

В: Документация по Python

Импорт модуля

Используйте import заявление:

>>> import random
>>> print(random.randint(1, 10))
4

 

import module будет импортировать модуль , а затем позволяют ссылаться на свои объекты - ценности, функции и классы, например - с помощью module.name синтаксиса. В приведенном выше примере, то random образом модуль импортируется, который содержит randint функцию. Таким образом , за счет импорта random образом вы можете вызвать randint с random.randint .

Вы можете импортировать модуль и назначить ему другое имя:

>>> import random as rn
>>> print(rn.randint(1, 10))
4

 

Если ваш питон файл main.py находится в той же папке, custom.py.Вы можете импортировать это так:

import custom

 

Также возможно импортировать функцию из модуля:

>>> from math import sin
>>> sin(1)
0.8414709848078965

 

Чтобы импортировать определенные функции глубже в модуль, оператор точки может быть использован только на левой стороне import ключевого слова:

from urllib.request import urlopen


 

В python у нас есть два способа вызвать функцию с верхнего уровня. Одним из них является import и другое from.Мы должны использовать import , когда мы имеем возможность коллизии имен. Предположим , что мы имеем hello.py файл и world.py файлы , имеющие ту же самую функцию с именем function.Тогда import заявление будет хорошо работать.

from hello import function
from world import function

function() #world's function will be invoked. Not hello's  


 

В общем import предоставит вам пространство имен.

import hello
import world

hello.function() # exclusively hello's function will be invoked 
world.function() # exclusively world's function will be invoked

 

Но если вы достаточно уверены, в целом вашего проекта нет никакого способа , имеющий такое же имя функции следует использовать from заявлением

Многократный импорт может быть выполнен в одной строке:

>>> # Multiple modules
>>> import time, sockets, random
>>> # Multiple functions
>>> from math import sin, cos, tan
>>> # Multiple constants
>>> from math import pi, e

>>> print(pi)
3.141592653589793
>>> print(cos(45))
0.5253219888177297
>>> print(time.time())
1482807222.7240417

 

Ключевые слова и синтаксис, показанные выше, также могут использоваться в комбинациях:

>>> from urllib.request import urlopen as geturl, pathname2url as path2url, getproxies
>>> from math import factorial as fact, gamma, atan as arctan
>>> import random.randint, time, sys

>>> print(time.time())
1482807222.7240417
>>> print(arctan(60))
1.554131203080956
>>> filepath = "/dogs/jumping poodle (december).png"
>>> print(path2url(filepath))
/dogs/jumping%20poodle%20%28december%29.png 

Импорт определенных имен из модуля

Вместо импорта всего модуля вы можете импортировать только указанные имена:

from random import randint # Syntax "from MODULENAME import NAME1[, NAME2[, ...]]"
print(randint(1, 10))      # Out: 5
 

from random необходимо, так как интерпретатор питона должен знать , из какого ресурса он должен импортировать функции или класс и import randint определяет функцию или сам класс.

Еще один пример ниже (аналогичный приведенному выше):

from math import pi
print(pi)                  # Out: 3.14159265359

 

Следующий пример вызовет ошибку, потому что мы не импортировали модуль:

random.randrange(1, 10)    # works only if "import random" has been run before

Выходы:

NameError: name 'random' is not defined

 

Интерпретатор питона не понимает , что вы имеете в виду с random.Он должен быть объявлен добавлением import random к примеру:

import random
random.randrange(1, 10) 

Импорт всех имен из модуля

from module_name import *

 

например:

from math import *
sqrt(2)    # instead of math.sqrt(2)
ceil(2.7)  # instead of math.ceil(2.7)

 

Это будет импортировать все имена , определенные в math модуле в глобальное пространство имен, кроме имен , которые начинаются с символа подчеркивания (что свидетельствует о том , что писатель чувствует , что это только для внутреннего использования).

Внимание: Если функция с тем же именем уже определена или импортирована, он будет перезаписан. Почти всегда импортировать только конкретные имена from math import sqrt, ceil является рекомендуемым способом:

def sqrt(num):
    print("I don't know what's the square root of {}.".format(num))

sqrt(4)
# Output: I don't know what's the square root of 4.

from math import * 
sqrt(4)
# Output: 2.0

 

Помеченный импорт разрешен только на уровне модуля. Попытки выполнить их в определениях класса или функции приводит к SyntaxError .

def f():
    from math import *

 

а также

class A:
    from math import *

 

оба терпят неудачу с:

SyntaxError: import * only allowed at module level 

Специальная переменная __all__

Модули могут иметь специальную переменную __all__ , чтобы ограничить , какие переменные импортируются при использовании from mymodule import * .

Дан следующий модуль:

# mymodule.py

__all__ = ['imported_by_star']

imported_by_star = 42
not_imported_by_star = 21

 

Только imported_by_star импортируется при использовании from mymodule import * :

>>> from mymodule import *
>>> imported_by_star
42
>>> not_imported_by_star
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'not_imported_by_star' is not defined

 

Тем не менее, not_imported_by_star может быть импортирован в явном виде:

>>> from mymodule import not_imported_by_star
>>> not_imported_by_star
21 

Программный импорт

Чтобы импортировать модуль через вызов функции, используйте модуль importlib (включен в Python начиная с версии 2.7):

import importlib
random = importlib.import_module("random")

Функция importlib.import_module() также импортирует Подмодуль пакета напрямую:

collection_abc = importlib.import_module ("collection.abc")

Для более старых версий Python, используйте imp модуль.  Используйте функцию imp.find_module и imp.load_module выполнять программный импорт.

Взятые из стандартной документации библиотеки

import imp, sys
def import_module(name):
    fp, pathname, description = imp.find_module(name)
    try:
        return imp.load_module(name, fp, pathname, description)
    finally:
        if fp:
            fp.close()

 

Не используйте __import__() программно импортировать модули! Есть тонкие детали , связанные с sys.modules , в fromlist аргумент и т.д., которые легко упустить из виду , который importlib.import_module() ручки для вас.

Импорт модулей из произвольного расположения файловой системы

Если вы хотите импортировать модуль , который уже не существует , как встроенный модуль в стандартной библиотеке Python , ни в качестве побочного пакета, вы можете сделать это, добавив путь к директории , где ваш модуль найден в sys.path.Это может быть полезно, когда на хосте существует несколько сред Python.

import sys
sys.path.append("/path/to/directory/containing/your/module")
import mymodule

 

Важно , чтобы вы добавить путь к каталогу , в котором mymodule найден, а не путь к самому модулю.

Правила PEP8 для импорта

Некоторые рекомендуемые PEP8 принципы стиля для импорта:

Импорт должен быть в отдельных строках:

from math import sqrt, ceil      # Not recommended
from math import sqrt            # Recommended
from math import ceil 

Порядок импорта в верхней части модуля выглядит следующим образом:

  • Импорт стандартной библиотеки
  • Связанный импорт третьей стороны
  • Локальный импорт приложений / библиотек
  1. Следует избегать импорта подстановочных знаков, поскольку это приводит к путанице в именах в текущем пространстве имен. Если вы from module import * , он может быть нечетким , если конкретное имя в коде происходит от module или нет. Это вдвойне верно , если у вас есть несколько from module import * отчетности -типа.
  2. Избегайте использования относительного импорта; вместо этого используйте явный импорт.

Импорт подмодулей

from module.submodule import function

 

Это импортирует function из module.submodule .

__import __ () функция

__import__() функция может быть использована для импорта модулей , где имя известно лишь во время выполнения

if user_input == "os":
    os = __import__("os")

# equivalent to import os

 

Эту функцию также можно использовать для указания пути к файлу модуля

mod = __import__(r"C:/path/to/file/anywhere/on/computer/module.py")

Повторный импорт модуля

При использовании интерактивного переводчика вы можете перезагрузить модуль. Это может быть полезно, если вы редактируете модуль и хотите импортировать новейшую версию, или если вы исправили элемент существующего модуля и хотите отменить изменения.

Обратите внимание , что вы не можете просто import модуль еще раз , чтобы вернуться:

import math
math.pi = 3
print(math.pi)    # 3
import math
print(math.pi)    # 3

 

Это потому, что интерпретатор регистрирует каждый импортируемый вами модуль. И когда вы пытаетесь повторно импортировать модуль, интерпретатор видит его в реестре и ничего не делает. Так трудный путь реимпортировать является использование import после удаления соответствующего пункта из реестра:

print(math.pi)    # 3
import sys
if 'math' in sys.modules:  # Is the ``math`` module in the register?
    del sys.modules['math']  # If so, remove it.
import math
print(math.pi)    # 3.141592653589793

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.