Какова степень оператора импорта в Python

Я получаю разные ответы на объем операций импорта в Python. Я провел некоторое исследование Stackoverflow, чтобы узнать, что было сказано по этой теме. Поэтому, если кто-то хочет импортировать модуль python из текущего рабочего каталога, файл с расширением .py, тогда проблем не должно быть. Однако, если кто-то хочет импортировать файл .py из другого каталога, тогда есть два ответа, которые противоречат моему мнению (возможно, потому, что у меня нет полного понимания, но я пытаюсь это понять):

Во-первых, этот ответ « Импорт файлов из другой папки в Python », который говорит, что мы не можем импортировать файлы из разных папок или каталогов в python.

Во-вторых, этот ответ « Как импортировать модуль с полным путем? «который говорит, что мы можем.

Может кто-нибудь объяснить мне, в чем разница?

4 Solutions collect form web for “Какова степень оператора импорта в Python”

Импорт в Python очень прост:

  1. Импорт может выполняться только посредством ссылок на модули (а не на пути)
  2. Python ищет вещи, которые он может импортировать в следующем порядке:
    1. Из каталога, в котором был выполнен сценарий.
    2. Из каталогов в переменной среды PYTHONPATH (если ее набор).
    3. Из общесистемного каталога модулей установки Python.

Он берет эти три вещи и строит список sys.path и ищет его в указанном порядке. У этого есть некоторые основные проблемы. Например, если у вас есть каталог со следующими файлами:

 foo.py math.py 

В foo.py если вы скажете import math он будет импортировать вещи из math.py а не из глобальной math библиотеки, которая поставляется с Python. Это связано с тем, что текущий каталог сначала выполняется для модулей.

Чтобы импортировать и использовать модули из пути файловой системы, который не находится в трех местах, которые ищет Python, вам нужно добавить его в переменную sys.path , прежде чем делать какие-либо импорт:

 import sys sys.path.insert(0, '/some/directory/') from somemodule import something 

Грубо говоря, в первом примере говорится, что вы не можете использовать оператор импорта для импорта из указанного места на диске. Во втором примере говорится, что вы можете добиться аналогичного эффекта, используя модуль imp (который обеспечивает доступ к внутренним компонентам системы импорта). Таким образом, вы не можете «действительно» импортировать такой модуль (в том смысле, что вы не можете использовать import для этого), но вы можете использовать модуль imp чтобы «заставить его работать».

Так что если ваш вопрос о заявлении на import , то нет, вы не можете (без взлома, см. Ниже); если ваш вопрос о простом «загрузке модуля» (не обязательно используя статус import ), то да, вы можете. Это вроде как сказать: «Можете ли вы открыть эту дверь? Нет, потому что у вас нет ключа. Вы можете открыть эту дверь? Да, разбив ее кувалдой».

Кроме того, обратите внимание, что даже первый пример предоставляет способ сделать это, это всего лишь немного уродливый взлом.

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

Оба ответа верны. Первый использует прямой оператор import , и, действительно, вы не можете импортировать из другой папки таким образом.

Первый добавляет путь к sys.path , который представляет собой список каталогов, которые python будет искать при импорте модуля. Второй не использует оператор import , но использует imp.load_source который работает по-разному.

Обычно вам нужно либо поместить все это в один файл, либо сделать скрипт в иерархии более высоких папок, которые импортируют все необходимые файлы.

Понимаю это:

При импорте файла Python ищет только текущий каталог, каталог, из которого выполняется сценарий начальной точки, и sys.path, который включает такие места, как каталог установки пакета

: Цитата из Импорт файлов из другой папки в Python
Теперь давайте скажем, что у вас есть файлы:

 I) application/app/folder/file.py II) application/app2/some_folder/some_file.py 

Вы хотите импортировать функции из файла some_file.py в файл file.py. Когда вы делаете from application.app.folder.file import func_name , python пытается разрешить путь application.app.folder.file . Он ищет, если в текущем каталоге есть пакет / модуль с именем application которое представляет собой application/app/folder/ для file.py и пути каталога в sys.path ; и python не находит application в любом из стандартных путей поиска. Поэтому по умолчанию вы не можете импортировать пути из какой-либо другой папки, которая не находится в пути python, но вы можете указать python о ваших пользовательских маршрутах поиска. Вы делаете это, добавляя свои пути к пути python ( sys.path )

 import sys sys.path.insert(0, 'application/app2/some_folder') import some_file 

Если вы хотите импортировать файл, для которого вы знаете абсолютный / полный путь (как в разделе «Как импортировать модуль с полным путем?» ), Вы делаете это как

 import imp foo = imp.load_source('module.name', '/path/to/file.py') foo.MyClass() 
  • Предотвращение кэширования страниц в Google App Engine
  • Проверить работу оператора
  • Python OSError: Нет такого файла или каталога
  • python: замените double \\ в пути с помощью одного \
  • Обмен кодом между модулями в проекте GAE
  • Как вызвать функцию класса python из другого файла
  • Может ли Pythonic подражать методу перегрузки?
  • Как выполнить оператор «if-for» в python?
  •  
    Interesting Posts for Van-Lav

    Импорт данных Sqlite в Google App Engine

    ValueError: требуется больше, чем 1 значение для распаковки, ошибка электронной почты django

    Pyinstaller «Не удалось выполнить скрипт pyi_rth_pkgres» и отсутствующие пакеты

    Проверка того, находятся ли какие-либо элементы в одном списке в другом

    Ruby эквивалент Python's help ()?

    tkinter: как использовать после метода

    Объединение вложенных элементов списка на основе повторяющегося значения

    Как создать массив Numpy объектов datetime64 с использованием API C?

    Использование символа asterix (*) как joker в замене строки python?

    Одновременное применение нескольких функций к объекту группы Pandas

    лучший алгоритм для нахождения расстояния для всех пар, где вес краев равен 1

    Когда `starmap` может быть предпочтительнее «List Comprehension»

    Как узнать, содержит ли массив numpy целые числа?

    Как индексировать URL-параметры в Python?

    операция pandas groupby с отсутствующими данными

    Python - лучший язык программирования в мире.