Один из ключевых моментов — текст СМС от банка
Текст в СМС примерно такой:
или
Т.е. банк прямым текстом пишет, что собирается сделать запрос в БКИ чтобы оценить платежное поведение заемщика, а затем, уже после одобрения кредита просит подтвердить, что клиент согласен подписать кредитный договор.
Но люди все равно называют коды безопасности, не читая СМС, а потом удивляются, что на них взят кредит. Правда, в случае банка «Хоум Кредит» буквы в СМС латинские, текст идет в транслитерации, поэтому его многие воспринимают с трудом. И если поспешить, то могут случиться очень большие убытки. Случай, описанный на портале banki.ru
- https://www.banki.ru/services/responses/bank/response/10368876/ — сумма не указана.
- https://www.banki.ru/services/responses/bank/response/10361853/ — 2 кредита на 289903 рубля.
- https://www.banki.ru/services/responses/bank/response/10361523/ — чуть было не взяли кредит на 999000 рублей, девушка одумалась в последний момент и не стала сообщать код из СМС:
Как проверить, что Вотсап читают
Уверены, что за вами следят? Используйте телефон друга
Есть и более простой способ узнать, что WhatsApp кто-то читает.
- Напишите со своего второго телефона или с телефона друга провокационное сообщение на свой WhatsApp;
- Предварительно отключите у себя на телефоне уведомления из WhatsApp, чтобы не увидеть, что сообщение доставлено;
- Когда увидите, что сообщение прочитано, но это сделали не вы, можно с уверенностью говорить о том, что вашу переписку в WhatsApp читает посторонний;
А еще недавно мой коллега, журналист AndroidInsider.ru Иван Кузнецов разобрался в том, правда ли, что через фронтальную камеру телефона следят. Результат вас сильно удивит.
Как исправить дисфункцию «На вашем ПК возникла проблема»
Решение данной проблемы делится на два основных этапа, в зависимости от того, можете ли вы загрузить систему в безопасном режиме или нет.
- Для перехода в безопасный режим перезагрузите PC, и на экране входа удерживайте Shift.
- А затем выберите «Выключение» — «Перезапуск».
- После перезагрузки ПК на экране выбора параметра выберите «Диагностика».
- Затем «Дополнительные параметры».
- Далее «Параметры запуска» и «Перезапуск».
После перезагрузки ПК в списке параметров нажмите 4 для выбора загрузки в безопасном режиме или 5 для выбора загрузки безопасного режима с поддержкой сетевых драйверов. Кстати, загрузившись в последнем, а потом перезагрузив ваш ПК стандартным способом, иногда можно устранить ошибку «На вашем ПК возникла проблема».
Выберите 4 или 5 вариант загрузки
Итак, в зависимости от того, загрузились вы в безопасном режиме или нет, и необходимо построить дальнейший алгоритм наших действий.
Импорт и главный модуль.
Не могу обойти вниманием. Так называется модуль, который вы непосредственно запускаете через
Также в конце этого модуля считается правилом хорошего тона писать
чтобы вызвать функцию только тогда, когда файл используется как скрипт.
На самом деле, конечно, можете писать и вызывать что угодно.
Смысл этого блока в том, чтобы делать вызов только тогда, когда мы запускаем скрипт непосредственно (из командной строки, кликая по нему мышкой и т.д.)
Обычно это ведет к разбору аргументов командной строки и отработке программы (выводу на консоль, созданию окошек GUI и прочее).
Если этот модуль был загружен из другого скрипта, то все эти побочные действия ни к чему — нужно получить сам модуль и работать с его объектами (функциями, переменными, классами). В этом случае имя модуля будет другим ( указывает на вызывающий скрипт).
Есть несколько способов запустить скрипт:
- указать его явно в командной строке. Тривиально.
- написать (2.4+) — в данном случае запустить юниттесты для нашей папки, в которой лежат тестовые сценарии.
Последний механизм подправляли в 2.5 и 2.6:
- PEP 338: Executing modules as scripts
- PEP 366: Main module explicit relative imports
Наиболее интересен последний PEP. Дело в том, что 2.5 стал поддерживать относительные пути импорта (которые начинаются с точки). Но — модуль верхнего уровня. «Выше» быть ничего не может а «рядом» лежат модули из стандартной библиотеки.
Поэтому в 2.6 ввели атрибут модуля :
Теперь можно указать свой пакет, если модуль выполняется как скрипт.
Последняя малоизвестная часть относится к импорту из zip архивов PEP 273: Import Modules from Zip Archives
Если вы положите файл с именем в такой архив, то можно запустить его через .
Я еще раз призываю строить разработку основываясь на библиотеках, пакетах и модулях, а не на файлах, папках и архивах. Разница довольно тонкая, но очень существенная.
Тем не менее могут быть случаи, системному администратору удобно использовать именно этот подход:
- его «скриптик» вырос и не помещается в один файл.
- тем не менее он еще не дорос до «большой библиотеки» со всем полагающимся оформлением.
6.2. Стандартные модули¶
Python поставляется с библиотекой стандартных модулей, описанной в отдельном документе,
Справочнике по библиотеке Python (далее — «Справочнику по библиотеке»). Некоторые
модули встроены в интерпретатор. Они обеспечивают доступ к операциям, не входящим в ядро языка,
и встроены для большей эффективности и предоставления доступа к основным средствам
операционной системы, таким как системные вызовы. Набор таких модулей — выбор настройки,
зависимый от используемой платформы. Например, модуль поставляется только в
Windows системах. Один конкретный модуль заслуживает определенного внимания:
, который встроен в каждый Python интерпретатор. Переменные
и определяют строки, использующиеся в качестве основного и
вспомогательного приглашений:
>>> import sys >>> sys.ps1 '>>> ' >>> sys.ps2 '... ' >>> sys.ps1 = 'C> ' C> print('Yuck!') Yuck! C>
Эти две переменные определены только для интерактивного режима интерпретатора.
Переменная представляет собой список строк, определяющий путь поиска
модулей. Он инициализируется значением путей по умолчанию, взятым из
переменной среды или из встроенного значения по умолчанию, если не
установлен. Изменить его можно с помощью стандартного списка операции:
Почему появляется эта ошибка в WIN 10
Рассматриваемая ошибка обычно возникает при загрузке или установке ОС Виндовс. Пользователь внезапно получает BSoD, на экране которого содержится упомянутое выше сообщение, техническое название ошибки, и QR-код ссылки на неё в сети. Ещё какое-то время система собирает технические данные об ошибке, и при наличии Интернет-подключения пересылает указанные данные в Майкрософт для последующего анализа.
По статистике Майкрософт в WIN 10, около 70% всех случаев возникновения этой и близкой к ней проблем вызваны некорректно работающими драйверами. Ещё 10% приходятся на аппаратные проблемы (память, жёсткий диск, перегрев), остальные 20% вызваны различными альтернативными факторами.
Каковы причины дисфункции, которая информирует нас об возникновении проблемы и предлагает перезагрузить ПК? Их может быть несколько:
- Некорректно работающие драйвера (особенно в ситуации их недавней установки);
- Повреждённые системные файлы;
- Повреждён системный реестр (файлы реестра случайно или намеренно удалены из папки System32);
- Перегрев системы (в частности, из-за её намеренного разгона);
- Различные проблемы с памятью PC (выход из строя планок памяти, ошибки в их работе и др.);
- Злокачественная деятельность вирусных зловредов;
- Ошибки (битые сектора) на винчестере (в частности, из-за некорректного отключения PC).
После появления ошибки «На вашем ПК возникла проблема, и его необходимо перезагрузить» мы ещё можем загрузиться в системе обычным образом или использовать «Safe mode». В самых же печальных случаях система входит в циклический режим перезагрузки (BSoD – Перезагрузка – BsoD). Вследствие которого получить доступ к системному функционалу становится невозможно.
6.3. Функция dir()¶
Встроенная функция используется для получения имён, определённых в модуле.
Она возвращает отсортированный список строк:
>>> import fibo, sys >>> dir(fibo) >>> dir(sys)
Без аргументов в перечислены имена, определенные в данный момент:
>>> a = 1, 2, 3, 4, 5 >>> import fibo >>> fib = fibo.fib >>> dir()
Обратите внимание, что в нем перечислены все типы имен: переменные, модули,
функции и т.д. не перечисляет имена встроенных функций и переменных
Если вам
требуется их список, они определены в стандартном модуле :
не перечисляет имена встроенных функций и переменных. Если вам
требуется их список, они определены в стандартном модуле :
Быстрый старт
Перейдем к практике. Если вы знакомы с модулями, то можете пропустить этот раздел. Сейчас мы выполним несколько примеров, которые позволят нам получить интуитивное понимание этой темы.
Модули
Создадим модуль с именем simplemath.py, который будет содержать функции для выполнения простых арифметических действий.
simplemath.py
def add(a, b): return a + b def sub(a, b): return a - b def mul(a, b): return a * b def div(a, b): return a / b
Создадим ещё один модуль worker.py, который будет использовать функции из simplemath.py. Если мы хотим импортировать все функции, то оператор import для нас отлично подойдет. Это будет выглядеть так.
worker.py
import simplemath print("\"import\" sample") print(simplemath.add(1, 2)) print(simplemath.sub(1, 2)) print(simplemath.mul(1, 2)) print(simplemath.div(1, 2))
Получим следующий результат.
"import" sample 3 -1 2 0.5
Если же нам нужна только функция сложения, то в таком случае лучше воспользоваться оператором from.
worker_from.py
from simplemath import add print("\"from\" sample") print(add(1, 2)) print(sub(1, 2))
Результат выполнения в этом случае будет такой.
"from" sample 3 Traceback (most recent call last): File "C:/worker_from.py", line 5, in <module> print(sub(1, 2)) NameError: name 'sub' is not defined
Заметьте, что теперь для вызова функции add() нет необходимости указывать, что она находится в модуле simplemath. В первом случае мы ее вызывали так simplemath.add(1, 2), теперь достаточно сделать так: add(1, 2). Вызов функции sub(1, 2) завершился неудачей, т.к. мы его не импортировали.
Пакеты
Создадим папку mathpack и перенесем туда модуль simplemath.py. Теперь, для того, чтобы использовать simplemath в нашем проекте, необходимо изменить процедуру импорта. Если мы просто добавим в import simplemath название пакета в виде префикса, то тогда нужно будет и модифицировать все места вызова функций из simplemath.
worker_pack.py
import mathpack.simplemath print("\"import\" sample") print(mathpack.simplemath.add(1, 2)) print(mathpack.simplemath.sub(1, 2)) print(mathpack.simplemath.mul(1, 2)) print(mathpack.simplemath.div(1, 2))
Это может быть не очень удобным. Можно модифицировать импорт следующим образом:
from mathpack import simplemath
Тогда в остальном коде ничего не придется менять.
worker_pack_from.py
from mathpack import simplemath print("\"import\" sample") print(simplemath.add(1, 2)) print(simplemath.sub(1, 2)) print(simplemath.mul(1, 2)) print(simplemath.div(1, 2))
На этом закончим наш “Быстрый старт” и начнем более детально разбирать темы модулей и пакетов.
Подключение модуля
Это можно сделать разными способами, выбор зависит только от нужд и желаний программиста.
Модули в Python — это файлы с расширением «.py». При импорте расширение опускается, интерпретатор и так знает, что после команды import следует имя модуля.
Программист может без проблем подключить любой модуль, который есть в стандартной библиотеке Python 3. Для подключения специфичных пользовательских инструментов сначала нужно их скачать. Обычно для этого используется пакетный менеджер pip.
Обычное подключение — import
Подключать модули желательно в самом вверху скрипта, используя ключевое слово «import», например .
После подключения программа получает доступ ко всем функциям, методам и классам, содержащимся в нём.
Программист может вызвать любую функцию из подключенной библиотеки используя префикс ««. Пример: где — это библиотека, которую мы подключили, а — имя функции, которая в ней описана.
Этот способ не допускает пересечения имён, то есть программист может использовать одно и то же имя функции в скрипте, точно такое же, как и в подключаемой библиотеке и не бояться, что после её подключения, функция будет переопределена.
Вот полный пример использования инструкции import в Python 3:
import random a = random.randint(1, 15) print(a)
Использование псевдонимов — as
Некоторые модули имеют длинное и неудобное название. Для удобства и сокращения количества кода программист может заменить его на своё.
Например, если написать ««, то вместо длинного для обращения к функциям библиотеки можно будет использовать короткое .
Импорт компонентов — from
Чтобы не захламлять программу большим количеством неиспользуемых инструментов, можно подключать не весь модуль, а какую-то его часть.
Например, программист хочет использовать только одну функцию из математической библиотеки . Если он подключит всю библиотеку, то в скрипт добавится более 40 функций, которые будут занимать место. Чтобы добавить в проект какую-то часть, используют ключевое слово :
from <имя подключаемого модуля> import <название функции>
Таким образом, основной скрипт получает доступ только к определённой функции. Кроме того, при таком подключении при вызове функций из подключённого модуля не используется префикс
Важно не забывать об этом, чтобы не допустить конфликта имён
Можно подключить несколько функций сразу в одной строке. Для этого их надо перечислить через запятую.
Если после import написать символ звёздочки «*», подключится все содержимое модуля. Это считается плохим тоном, потому что может привести к совпадению имён из основного скрипта с именами из подключаемого. Но если программист уверен, что использовал уникальные названия для функций и переменных, теоретически он может использовать этот способ.
Ручной метод очистки памяти Xiaomi от вирусов
Как я уже писал выше, вирусы и зловредные программы возможно удалить руками, потому что они в системе видны, как программы.
Самый простой метод заключается в том, чтобы открыть список всех установленных приложений и внимательно его просмотреть, удаляя все подозрительные или давно не используемые программы.
Сделать это можно зайдя в общие настройки, после чего запустив меню «Все приложения».
Первым делом нужно войти в безопасный режим, о том, как это сделать есть статья на сайте. После чего проделать поиск заново, но теперь все программы будут видны в списке.
Если же ни автоматический, ни ручной метод не помогают – остаётся выполнить сброс к заводским настройкам.
Метки: антивирус, безопасность, вирус
Об авторе: MiMaster
Привет, меня зовут Тимур. Я с детства увлекался компьютерами и IT-Индустрией, мне это нравится, это моя страсть. Последние несколько лет глубоко увлёкся компанией Xiaomi: идеологией, техникой и уникальным подходом к взрывному росту бизнеса. Владею многими гаджетами Xiaomi и делюсь опытом их использования, но главное — решением проблем и казусов, возникающих при неожиданных обстоятельствах, на страницах сайта mi-check.ru
Python 2 VS. Python 3
Наиболее важные различия между тем, как Python 2 и Python 3 рассматривают инструкции , были описаны выше. Они снова рассматриваются ниже, наряду с некоторыми другими менее важными отличиями.
- Python 2 поддерживает неявный импорт по относительному пути, а Python 3 — нет.
- Python 2 требует, чтобы файлы находились внутри папки, чтобы папка считалась пакетом и была импортирована. В отличие от него для Python 3.3 и выше, благодаря поддержке неявного пространства имен пакетов, все папки являются пакетами независимо от наличия в них файла .
- В Python 2 можно написать внутри функции. В Python 3 синтаксис разрешен только на уровне модуля, но не внутри функций.
Error Establishing A Database Connection (Ошибка соединения с базой данных)
Из всех распространенных ошибок WordPress эта сама объясняет причину своего появления: где-то нарушена связь с базой данных WordPress.
Причины возникновения ошибки соединения с базой данных:
- Ошибка файла wp-config.php
- Проблемы с вашим хостинг-провайдером.
- Вас хакнули!
Что делать, если возникла ошибка соединения с базой данных:
a. Отредактировать ваш wp-config.php file
Получите доступ к файлу wp-config.php с помощью файлового менеджера или FTP и удостоверьтесь в том, что имя базы данных, хост, имя пользователя и пароль указаны правильно.
b. Решить проблемы с вашим веб-хостингом
Если wp-config.php выглядит нормально, а ошибка никуда не ушла, вам нужно поговорить с вашим хостинг-провайдером. Вам скажут, в чем проблема: упал ли сервер или хостер просто решил расширить лимит оперативной памяти вашей базы данных. Если вам скажут, что с их стороны все в порядке, то пришло время озаботиться вопросом WordPress-безопасности на вашем сайте.
c. Просканируйте ваш сайт на наличие угроз
Хакеры не дремлют. Да, не дремлют. В любое время вы можете пасть жертвой хакерской атаки, особенно если вы не знаете, как обезопасить ваш WordPress-сайт. Чтоб удостовериться в том, что ваш сайт не был хакнут, просканируйте его с помощью инструмента типа Sucuri Sitecheck.
Как защитить аккаунт от взлома
Часто бывает и так, что пароли от учетных записей оказываются в открытом доступе и их нужно оперативно менять. Например, месяц назад моему знакомому на почту пришло уведомление, что была зафиксирована попытка входа в аккаунт аж из Вьетнама. Жаль, что мой товарищ заметил это спустя неделю. Как этого не допустить?
Используйте все способы защиты приложения в месснджере
- Во-первых, обязательно включите уведомления от электронной почты. Да, зачастую туда приходит реклама, но это поможет вам, если кто-то попытается взломать Instagram.
- Во-вторых, используйте расширения для паролей в Google Chrome. Например, LastPass, чтобы менять данные, если они окажутся под угрозой. В iOS нужно время от времени проверять «Пароли» в Настройках.
- В-третьих, обезопасьте свою электронную почту, ведь именно ваш ящик является самой главной целью. Например, в приложении Почты Mail.Ru в настройках безопасности нужно включить вход по одноразовому коду — это немного неудобно, зато вы точно будете уверены, что никто не войдет в ваш аккаунт с другого устройства.
Кроме того, приложение Почта Mail.ru показывает модель устройства и даже город, откуда был зафиксирован вход в аккаунт.
Как работает процесс проверки
Прежде чем мы углубимся в то, как преодолеть проблему кода проверки, давайте быстро пройдемся по всем шагам, необходимым для установки WhatsApp.
Возможно, вы сможете найти то, что вы пропустили. После загрузки WhatsApp на Магазин игр или Магазин приложенийВам будет предложено сделать следующее:
- Найдите и выберите свою страну из выпадающего меню. Код страны автоматически появится после этого.
- Введите свой номер телефона рядом с кодом страны. Не забудьте не ставить «0» перед номером.
- Выберите «Далее». Это действие отправит запрос на подтверждение кода в WhatsApp.
После этого вы должны получить код через SMS практически мгновенно. Предполагается, что поле чисел на экране заполняется автоматически, хотя это может не сработать для более старых операционных систем.
Возможно, вам придется ждать код подтверждения до 15 секунд, в течение которых вы, вероятно, не будете паниковать или что-то в этом роде. Но что, если вы действительно не получаете код?
Ошибка «WordPress Memory Exhausted» (Нехватка оперативной памяти WordPress)
Как известно, эту ошибку всегда сопровождает белый экран смерти или сообщение об этой ошибке
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2348617 bytes) in /home/username/public_html/your_site/wp-includes/plugins.php on line 36
Причины нехватки оперативной памяти:
Какой-либо плагин или скрипт съедает всю вашу память.
Решение проблемы:
Проще всего увеличить вашу оперативную память. Чтоб это сделать, откройте файл wp-config.php (его можно найти в корневой директории) и добавьте туда этот код:
define ('wp_memory_limit', '64M');
Замечание: вам не придется скачивать этот файл (или любой другой), если вы используете файловый менеджер. Вы можете отредактировать файл прямо там. Поговорите с вашим хостером, если не можете понять, как редактировать файлы в файловом менеджере.
Когда хороший код — это плохо
Мы сейчас столько говорили о том, как важен качественный код, а теперь заявляем обратное? Да. Иногда хороший, «правильный» код — это не так уж и замечательно.
Причина очень простая: в программировании, к сожалению, приходится выбирать между качеством и скоростью работы, и в некоторых случаях скорость важнее.
Чтобы понять, насколько важна скорость, представим себе двух программистов: Петю и Васю. Один обстоятельный, педантичный, а второй — его полная противоположность. Обоим пришла в голову идея сделать какой-то продукт. Петя сел, придумал архитектуру и начал делать хорошо и неторопливо. И делает уже полгода. Вася сделал всё за месяц, с ошибками, багами — но сразу запустил, нашёл клиентов, сделал второй релиз… В итоге через полгода, когда Петя только доделал свой замечательный продукт, у Васи уже много пользователей и название продукта уже на слуху. А часть багов он почистил во втором релизе.
Мораль этой истории: иногда важнее быстрее выйти на рынок и занять нишу, чем сделать идеально.
Как тогда быть? Плохой код — плохо, хороший — тоже не всегда хорошо… Дело вот в чём:
Качество кода — это параметр, который мы меняем в зависимости от цели.
Если вы пишете приложение для банка, то потратите много времени на тестирование и проработку, потому что ошибка может стоить сотен тысяч рублей.
Если же вы делаете лендинг, который просто расскажет о временной акции и соберёт мейлы в базу данных, то тут уже важна скорость. Вы знаете, что, как только акция закончится, ваш код больше не понадобится
Дорабатывать и поддерживать его не нужно, и другие разработчики его использовать тоже не будут — тут достаточно написать быстро и проверить, что он работает, остальное не важно
Это основные принципы создания качественного кода: не забывать про стандарты, оглядываться на то, что вы уже написали, не бояться фидбека от коллег и не забывать тестировать
Но в самом начале стоит взвесить: важно вам сейчас качество, или надо закончить разработку как можно скорее
Кражи через приложение «Мой кредит»
Тут понятно, что мошенники запросто пользовались личным кабинетом без 5 минут потерпевшей в приложении «Мой кредит».
https://www.banki.ru/services/responses/bank/response/10224521/ — 2 кредита на 650000 рублей. Потерпевшей пришло Push-уведомление об одобрении кредита на сумму 650 000 руб. Сим-карта теле2 была заблокирована, и как оказалось, номер телефона был изменен непосредственно перед подачей заявки на кредит.
Еще случай — https://www.banki.ru/services/responses/bank/response/10345493/ — 100000 рублей
Банк ответил: «Договор был оформлен в приложении, все СМС для подписания кредита отправлены на Ваш номер телефона.»
Удаление и отключение вирусов Android
Если вы никогда не рутировали свой Android, вероятность заражения вирусом очень мала. Однако это всегда возможно, и это может быть вирус или какое-либо другое вредоносное ПО, вызвавшее всплывающее предупреждение о поддельном вирусе.
Следуйте приведенным ниже инструкциям, чтобы убедиться, что на вашем Android нет вредоносных программ.
-
Зайдите в настройки Android , нажмите « Приложения» и прокрутите вниз список приложений. Удалите все приложения, которые вы не узнали или недавно установили. Чтобы удалить, просто нажмите на приложение и выберите Удалить .
-
Установите приложение Malwarebytes из Google Play . После установки обновите базу данных и запустите полное сканирование системы на вашем Android. Если Malwarebytes обнаружит вредоносное ПО, удалите его с вашего устройства.
-
Установите CCleaner из Google Play . Следуйте инструкциям, чтобы предоставить приложению необходимые разрешения. Затем выберите Запустить сканирование, чтобы запустить полное сканирование, выберите Начать очистку и выберите Завершить очистку, чтобы очистить все ненужные файлы с вашего Android.
После того, как вы выполнили описанные выше шаги, ваш Android должен быть очищен от любых вредоносных программ, которые могли вызвать появление поддельного предупреждения о вирусе на вашем Android.
Всплывающее окно с предупреждением о вирусах на Android
В большинстве случаев пользователи Android видят всплывающее предупреждение о фальшивых вирусах только при использовании веб-браузера для посещения вредоносного веб-сайта.
Всплывающее окно предупреждает вас о том, что ваш Android заражен вирусом, и предлагает вам нажать кнопку, чтобы запустить сканирование и удалить программное обеспечение с вашего устройства.
Самое важное, что вы можете сделать, — это не нажимать какие-либо кнопки на сайте. Если всплывающее окно с предупреждением о вирусах на вашем Android появилось за пределами веб-браузера, возможно, сам браузер был заражен вредоносным дополнением, которое необходимо удалить
Если всплывающее окно с предупреждением о вирусах на вашем Android появилось за пределами веб-браузера, возможно, сам браузер был заражен вредоносным дополнением, которое необходимо удалить.
Хорошей новостью является то, что ваш Android, вероятно, еще не заражен каким-либо вирусом, если вы не нажали ни одной кнопки на веб-сайте.
Повторный импорт модуля
При использовании интерактивного переводчика вы можете перезагрузить модуль. Это может быть полезно, если вы редактируете модуль и хотите импортировать новейшую версию, или если вы исправили элемент существующего модуля и хотите отменить изменения.
Обратите внимание , что вы не можете просто модуль еще раз , чтобы вернуться:
Это потому, что интерпретатор регистрирует каждый импортируемый вами модуль. И когда вы пытаетесь повторно импортировать модуль, интерпретатор видит его в реестре и ничего не делает. Так трудный путь реимпортировать является использование после удаления соответствующего пункта из реестра:
Но есть более простой и простой способ.
Все о __init__.py
Файл выполняет 2 функции.
- Преобразование папки со скриптами в импортируемый пакет модулей (до Python 3.3).
- Запуск кода инициализации пакета.
Преобразование папки сценариев в импортируемый пакет модулей
Как уже было сказано выше, любой каталог, содержащий файл с именем представляет собой пакет Python. Этот файл так же может быть пустым. Например, при запуске скрипта в Python 2.7 можно импортировать пакет , но не , так как в каталоге нет файла .
Это НЕ применимо к Python 3.3 и выше, благодаря принятию неявных пространств имен пакетов. В принципе, Python 3.3+ рассматривает все папки как пакеты, поэтому пустые файлы больше не нужны и могут быть опущены.
Например, представляет собой пространство имен пакета, поскольку в папке нет файла . Если мы запустим интерактивный интерпретатор Python версии 3.6 в каталоге , то получим следующий результат:
>>> import packB >>> packB <module 'packB' (namespace)>
Запуск кода инициализации пакета
В первый раз, когда вы импортируете пакет или один из его модулей, Python будет выполнять файл в корневой папке пакета, если этот файл существует. Все объекты и функции, определенные в , считаются частью пространства имен пакета.
Рассмотрим следующий пример.
Листинг файла :
def a1_func(): print("running a1_func()")
Листинг файла :
## этот импорт делает a1_func доступной напрямую из packA.a1_func from packA.a1 import a1_func def packA_func(): print("running packA_func()")
Листинг файла :
import packA # "import packA.a1" будет работать также packA.packA_func() packA.a1_func() packA.a1.a1_func()
Команда выведет следующее:
running packA_func() running a1_func() running a1_func()
Примечание: если в файле вызывается , и вы запускаете в командной строке команду , то НЕ будет вызван, хотя на первый взгляд кажется, что является частью пакета . Так происходит потому, что Python запускает скрипт (в нашем случае ), но содержащая его папка не является пакетом.