Вторая по частоте future-функция, которую я использовал, это абсолютный импорт
from __future__ import absolute_import
Что она делает?
Изменения, которые вносит эта инъекция описаны в PEP328
Покажу простой пример.
Допустим, есть такой пакет:
/my_package
/__init__.py
/main.py
/string.py
Смотрим код в my_package/main.py
# main.py
import string
Простой пример готов) Вопрос в том, какой модуль импортируется в данном случае? Есть два варианта:
1. модуль в моём пакете my_package.string
2. стандартный модуль string
И вот тут вступает в дело приоритет импортов. В Python2 порядок следующий: помимо иных источников, раньше ищется модуль внутри текущего пакета, а потом в стандартных библиотеках. Таким образом мы импортнём my_package.string.
Но в Python3 это поведение изменилось. Если мы указываем просто имя пакета, то ищется именно такой модуль, игнорируя имена в текущем пакете. Если мы хотим импортнуть именно подмодуль из нашего пакета то, мы должны теперь явно это указывать.
from my_package import string
или относительный импорт, но с указанием пути относительно текущего модуля main
from . import string
Еще одной неоднозначностью меньше 😎
Подробней про импорты здесь:
https://docs.python.org/3/tutorial/modules.html
#2to3#pep#basic
Мероприятия на любой вкус и цвет: DevDay, Huawei Developer Day, Бизнес-завтрак вместе с Google и Click, IT network.2019, WebDev 👩🏼💻👨🏽💻
Бэкенд-разработчикам на на этой неделе повезло больше всего: SPb Python Meetup, Scalability Meetup, SymCode meetup, C++ Party, Второй митап PHP NN и Rust Meetup, Tech speaking club golang 🐹
А также, нетехнические, но околоайтишные мероприятия: Agile Lean Meetup, Atlassian community evening, AgileUfa, Ненастоящий Scrum-проект из настоящего Lego, Авторское право и IT 💻
📅17 ДЕКАБРЯ, ВТ
SPb Python Meetup | 19:00 - 21:00 | СПб, офис EPAM
Qlik Russian Meetup №1 | 19:00 - 22:00 | Москва
Митап Data People | 18:30 - 21:30 | Москва
Atlassian Community | 19:00 - 21:00 | Уфа, офис Модуль Банк
Scalability Meetup #13 | 20:00 - 22:00 | Москва
📅18 ДЕКАБРЯ, СР
DevDay 48 | 19:00 - 21:00 | Казань
Huawei Developer Day | 09:00 - 17:00 | Новосибирск
Бизнес-завтрак вместе с Google и Click | 10:30 - 14:00 | Москва
№8 SymCode meetup | 19:00 - 21:00 | СПб, офис JetBrains
IT talk «Как выживать с клиентом, который не готов работать в зрелых методологиях» | 19:00 - 20:00 | СПб
📅19 ДЕКАБРЯ, ЧТ
Agile Lean Meetup | 19:00 - 21:00 | Москва
Интеллектуальная игра «ВРЕМЯ ANN» | 18:00 - 20:00 | Нижний Новгород
Какие алгоритмы должен знать программист? | 20:00 - 21:30 | Онлайн
IT network.2019 | 18:30 - 21:00 | Белгород
C++ Party | 18:30 - 22:00 | СПб, офис Яндекс
Atlassian community evening | 19:00 - 21:30 | СПб
AgileUfa | 19:00 - 21:30 | Уфа
Tver.io Anniversary Meetup | 18:30 - 21:30 | Тверь, офис Jet Rockets
📅20 ДЕКАБРЯ, ПТ
XXV митап Сообщества блокчейн-разработчиков | 19:00 - 21:00 | СПб
Ненастоящий Scrum-проект из настоящего Lego | 19:00 - 21:30 | СПб, офис EPAM
📅21 ДЕКАБРЯ, СБ
Авторское право и IT | 15:00 - 17:30 | Краснодар
WebDev #11 | 13:00 - 16:00 | Новосибирск
Flutter Interact | 12:30 - 15:00 | Омск
Второй митап PHP NN | 12:00 - 15:00 | Нижний Новгород
Tech speaking club #golang v2.0 | 18:00 - 20:00 | Казань
📅22 ДЕКАБРЯ, ВС
Rust Meetup | 12:00 - 16:00 | СПб, офис Times
Лекционный день по разработке настольных игр | 11:00 - 18:00 | Москва
Подробное описание,
ссылки на регистрацию —
тут, а также в кнопке 👇🏻👇🏻👇🏻
http://bit.ly/35vlVWq