2015-08-28 3 views
1

Я провел некоторое исследование, и я наткнулся на следующую статью: http://effbot.org/zone/import-confusion.htm. Хотя это, кажется, отличный гид, это было написано в 1999 году, назад. Я использую Python 3.4.3, поэтому я думаю, что некоторые вещи изменились, что меня беспокоит, потому что я не хочу изучать то, что не применимо. Поэтому, в Python 3, каковы все способы импорта пакетов и модулей, подробно? Какие пути наиболее распространены и должны использоваться над другими?Каковы все способы импорта модулей в Python?

ответ

0

одна из вещей, которые я люблю о питона все имеет дизайн

https://www.python.org/dev/peps/pep-0328/

+0

Хотя эта ссылка, безусловно, имеет значение, вы должны расширить свой ответ, чтобы включить в него дополнительную информацию. – Cyphase

3

Единственными способами, которые имеют значение для обычного использования являются первые три пути, перечисленные на этой странице:

  • import module
  • from module import this, that, tother
  • from module import *

Они не изменились в Python 3. (Некоторые подробности о том, где Python ищет файл module.py, чтобы загрузить module были переделаны, но поведение импорта само по себе еще работает, как описано на странице вы связанный.)

Одна вещь была добавлена, перед Python 3, но с этой статьи. Это явный относительный импорт. Они позволяют делать что-то вроде from ..module import blah. Этот вид импорта может использоваться только изнутри пакета; он позволяет модулям в пакете ссылаться на другие модули в одном пакете таким образом, который относительно пакета (т. е. не указывать, как импортировать пакет верхнего уровня). Вы можете прочитать данные в PEP 328. Но даже это, по сути, просто новая вариация синтаксиса стиля from module import blah, упомянутого на странице, с которой вы связались.

__import__ также по-прежнему работает в Python 3. Это внутренняя функция, которую вам нужно будет использовать только при выполнении чего-то довольно необычного. То же самое относится к различным функциям модуля importlib (и устаревшего модуля imp). Точный уровень мастерства этих импортных функций варьируется от одного к другому, но для обычного использования «Я просто хочу импортировать этот модуль и использовать его», вам по сути никогда не нужно их использовать. Они нужны только в том случае, если вы хотите сделать что-то вроде динамического импорта модуля, имя которого неизвестно до выполнения.

+0

@Miles - дополнительную информацию относительно относительного импорта можно найти ниже: http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python –

+0

@BrenBarn Хорошо, это имеет смысл. Однако у меня есть одна конкретная проблема. У меня есть пакет с двумя модулями. У меня есть другой модуль за пределами пакета, и я пытаюсь получить доступ к функциям внутри обоих модулей внутри пакета. В верхней части моего текущего модуля я печатаю 'import package_name', но у меня все еще нет доступа к функциям в подмодулях. Что я делаю не так? –

+0

@MilesDavis: вам следует искать аналогичный вопрос на этом сайте. Если вы не нашли ответа, вы должны задать отдельный вопрос, объясняющий детали вашей проблемы. Вы задали здесь очень общий вопрос; если у вас есть конкретная проблема с конкретной установкой, которая требует отдельного вопроса. – BrenBarn

2

Дзен Python дает вам некоторые советы:

>>> import this 
The Zen of Python, by Tim Peters 

Beautiful is better than ugly. 
Explicit is better than implicit. 
Simple is better than complex. 
Complex is better than complicated. 
Flat is better than nested. 
Sparse is better than dense. 
Readability counts. 
Special cases aren't special enough to break the rules. 
Although practicality beats purity. 
Errors should never pass silently. 
Unless explicitly silenced. 
In the face of ambiguity, refuse the temptation to guess. 
There should be one-- and preferably only one --obvious way to do it. 
Although that way may not be obvious at first unless you're Dutch. 
Now is better than never. 
Although never is often better than *right* now. 
If the implementation is hard to explain, it's a bad idea. 
If the implementation is easy to explain, it may be a good idea. 
Namespaces are one honking great idea -- let's do more of those! 

Итак, учитывая простой, очевидный метод является: importMODULE_NAMEи она сохраняет пространство имен я бы предположить, что в то время как существует несколько способов импорта, как вы можете видеть из python3 manual entry, и вы можете продлить их, переопределив метод __import__() или перевернув свои собственные. Я бы сказал, что придерживаюсь его , пока у вас не будет good Причина не для.

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

Если вы хотите, чтобы понять проектные решения, лежащие механизмы импорта начните с руководством, то следить в ВПД 302 & 420 являются хорошими отправными точками.

0

Мы можем импортировать модули в Python, используя следующие способы

  • import module
  • from module import function
  • from module import *

Хотя использование from module import * не является хорошей практикой, из-за читать Способность: Другой программист не может понять, что все фактически используются в текущем модуле. Перегрузка памяти: Все загружаются в память. Best practices for using import in a module.

Смежные вопросы