Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071

Как узнать, кто импортировал модуль?

10.07.2019, 18:54. Показов 2292. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как узнать кто импортировал модуль?
Например:
Python
1
2
#1.py
import 2
Python
1
2
3
# 2.py
importer = importer()
importer.2 = 'some text' # Тоже что и хотел в 1 вопросе
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2019, 18:54
Ответы с готовыми решениями:

Как узнать кто занимает кто потребляет всю ширину канала
У меня вопрос в тему: 1) роутер (zyxel keenetic dsl) + USB-модем (Хуавей H3270s, короче Билайновский) + внешняя антенна. Канал тырнета...

Можно как то, поменять код ниже что бы он импортировал excel файл?
Нужно изменить код ниже что он импортировал excel файлы, помогите! Процедура ИмортироватьДанныеНаСервере() Текст = Новый...

Как пропустить все строки из файла, который импортировал через 1 переменную
Как пропустить все строки из файла, который импортировал через 1 переменную? Вообщем, в программу добавляются прокси. И их разбиваю...

7
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.07.2019, 01:26
В общем случае, никак. Об это уже писалось (здесь в том числе). Но каждый раз опять всплывает кто-то с непонятными хотелками и начинается...
Кстати, import 1 вообще нельзя сделать - имена модулей не могут называться цифрами.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
11.07.2019, 09:08  [ТС]
Про импорт знаю. Просто для примера. А можно как-то с помощью c++ это сделать? Ну, например подключиться к интерпретатору как-нибудь?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.07.2019, 12:02
Python
1
print(sys._getframe(1).f_globals.get('__name__'))
Но это дает не совсем тот модуль, который осуществляет импорт самым первым. Можете попробовать поиграться.
Я инфу из фрейма использовал для других целей - получить путь для модуля, который вызвал функцию из внешней либы.
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
11.07.2019, 15:40  [ТС]
Спасибо!

Добавлено через 2 минуты
Попробовал: выдаёт совсем не то, а какоето importlib.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.07.2019, 16:00
Цитата Сообщение от Hyppoprogramm Посмотреть сообщение
а какоето importlib.
Ну так я о чем - путь импорта в Python очень сложен: причем самому Python вообще не важно кто, кого и откуда импортировал - поэтому это нигде и не отслеживается.
1
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
12.07.2019, 09:44  [ТС]
Цитата Сообщение от Hyppoprogramm
А можно как-то с помощью c++ это сделать?
Может как-то что-то посмотреть?
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
13.07.2019, 20:35
Потестите вот это

Python
1
2
3
# mod1.py
import mod2
import math
Python
1
2
# mod2.py
import math
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys
import inspect
# import os
 
from pprint import pprint
 
 
# print(*sys.modules.keys(), sep='\n')
 
FILENAME = 1
LINES = -2
 
importers = {}
 
 
def needed_frame(frame):
    return frame[LINES] is not None and any('import' in l for l in frame[LINES])
 
class DFinder:
    @classmethod
    def find_spec(cls, fullname, path=None, target=None):
        frames = inspect.getouterframes(sys._getframe())
        fr = next(f for f in frames if needed_frame(f))
        importers[fullname] = fr[FILENAME]
        
        # importers[fullname] = ' <- '.join(
        #    os.path.basename(f[FILENAME]) for f in frames if needed_frame(f)
        # )
        
 
sys.meta_path.insert(0, DFinder)
 
 
if __name__ == '__main__':
    import mod1
    
    pprint(importers)
Результат
Python
1
2
3
{'math': '...\\mod2.py',
 'mod1': ...,
 'mod2': ...}
Эта штука не гарантирует результат. Например, для sys, inspect и всех прочих модулей, которые они импортируют, записей не будет (в целом для всего что есть в sys.modules до строки sys.meta_path.insert). Да и вообще...

Если раскомментировать строки в DFinder, можно увидеть полные цепочки импортов.


Garry Galler,
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2019, 20:35
Помогаю со студенческими работами здесь

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

Как узнать КТО грузит ЦП
Короче Виста тормозит ни по децки. Диспетчер задач показывает, что загрузка ЦП равна 100%. Но при этом тот же диспетчер задач показывает,...

Есть 4 студента, узнать кто сдаст лабу, кто пойдет на дискотеку и т.д
Привет. У нас появился новый предмет, на Visual Prolog. Ну так вот, в чем дело. Есть лаб1, в данной лабе есть 3 задания, 2 из которых я...

Как узнать, подходит ли модуль для микроконтроллера?
Проверять вход/выходы? Или выбирать по другим критериям?

Как узнать, подходит ли модуль для микроконтроллера?
Проверять вход/выходы? Или выбирать по другим критериям?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru