[PYTHON] Accrocher à la première importation du module et imprimer le chemin du module

Hook pour importer pour la première fois et imprimer le chemin du module

TL;DR

motivation

[^ 1]: Pour être exact, sur l'interpréteur Python de Maya. [^ 2]: censuré.

code

firstimport_hook.py


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import __builtin__
import types
import copy
import sys

import inspect

# reload()Pour les contre-mesures__import__Stocker après avoir confirmé qu'il s'agit de la fonction intégrée.
if isinstance(__import__, types.BuiltinFunctionType):
    _original__import__ = copy.deepcopy(__import__)

#Par exemple, s'il est importé accroché par un autre module
# _original__import__Ne peut pas être défini, alors lancez une erreur de manière appropriée
elif '_original__import__' not in globals():
    raise ImportError('Definition of _original__import__ failed.')


def __get_modulefile_from_load_module():
    try:
        #Obtenez le fichier du module à lire
        currentframe = inspect.currentframe()
        module_file = currentframe.f_back.f_back.f_code.co_filename
    finally:
        #Suppr pour corriger le nombre de références.
        del currentframe

    return module_file


def print_modulefile_post_first_import(*args, **kwargs):
    """Afficher les fichiers du module après l'importation initiale"""

    #Obtenez le statut de chargement du module avant l'importation
    loaded_module_names = sys.modules.keys()

    # __import__Courir
    module = _original__import__(*args, **kwargs)

    #Ne traitez pas les modules qui ont déjà été chargés une fois
    if module.__name__ in loaded_module_names:
        return module

    # __file__Ne pas afficher le chemin du module sans
    filepath = getattr(module, '__file__', None)
    if filepath:
        path_from_load_module = __get_modulefile_from_load_module()

        print('%s -> %s' % (path_from_load_module, filepath))

    return module


def enable_import_hook():
    """Activer le hook d'importation"""
    __builtin__.__import__ = print_modulefile_post_first_import


def disable_import_hook():
    """Désactiver le hook d'importation"""
    __builtin__.__import__ = _original__import__


if __name__ == '__main__':
    #Activer le hook d'importation
    enable_import_hook()

    import json
    reload(json)

startup.py


import firstimport_hook
firstimport_hook.enable_import_hook()

finalement

Désormais, lorsque vous importez un fichier Python pour la première fois, vous pouvez imprimer () le chemin du module chargé. Après cela, si vous l'envoyez au serveur de manière appropriée, il sera possible de l'agréger.

mel? Tu ne sais pas ...

Recommended Posts

Accrocher à la première importation du module et imprimer le chemin du module
[Introduction à Udemy Python3 + Application] 69. Importation du chemin absolu et du chemin relatif
Vérifiez le chemin du module importé Python
Comment accéder à la variable globale du module importé
[Selenium] Comment spécifier le chemin relatif de chromedriver?
Module [Python of Hikari-] Chapitre 08-03 (Importation et utilisation de la bibliothèque standard)
Facilitez la compréhension de l'affichage des exceptions du module Python
Je veux connaître la nature de Python et pip
Commandes et fichiers pour vérifier la version de CentOS Linux
2015-11-26 python> Afficher la liste des fonctions du module> import math> dir (math)
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django
Trouvez le chemin critique de PERT en utilisant la recherche de priorité de largeur et la recherche de priorité de profondeur
Remarque: obtenez les premier et dernier éléments de Python OrderedDict de manière non destructive
[EC2] Comment installer Chrome et le contenu de chaque commande
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
À propos du bogue qu'Anaconda ne parvient pas à importer numpy et scipy
La première intelligence artificielle. Comment vérifier la version de Tensorflow installée.
J'ai résumé comment changer les paramètres de démarrage de GRUB et GRUB2
Pour améliorer la réutilisabilité et la maintenabilité des flux de travail créés avec Luigi
Convertissez le résultat de python optparse en dict et utilisez-le
Tester la version du module argparse
L'histoire de Python et l'histoire de NaN
Comment utiliser le module optparse
[Python] La pierre d'achoppement de l'importation
First Python 3 ~ Le début de la répétition ~
Obtenez le premier élément du jeu de requêtes
Veuillez arrêter l'impression et importer la journalisation pour la sortie du journal
Comment utiliser le module ConfigParser
Supplément à l'explication de vscode
[Python Kivy] Comment obtenir le chemin du fichier par glisser-déposer
Méthode Ford-Falkerson et ses applications - Supplément au chapitre 8 de la référence rapide de l'algorithme -
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
J'ai essayé de visualiser la tranche d'âge et la distribution des taux d'Atcoder
Python> sys.path> Liste de chaînes indiquant le chemin pour rechercher des modules
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
J'ai essayé de trouver l'itinéraire optimal du pays des rêves par recuit (quantique)
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
Je veux analyser les sentiments des gens qui veulent se rencontrer et trembler
__Getattr__ et __getattribute__ pour personnaliser l'acquisition des attributs d'objet par des points
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
L'histoire d'essayer de reconnecter le client
Ceci et celui de la notation d'inclusion.
Script pour changer la description de fasta
Comment vérifier la version de Django
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Revoir le concept et la terminologie de la régression
Coexistence de la journalisation Flask et de la journalisation d'autres modules
Obtenez le chemin d'accès au fichier d'unité systemd
Pour importer votre propre module avec jupyter
[Python] Importez le module d'un niveau supérieur
Imprimer le chemin de l'en-tête d'inclusion avec clang
L'histoire d'essayer deep3d et de perdre
L'histoire du changement de pep8 en pycodestyle
Importez en spécifiant directement le chemin du répertoire
Importation de modules et gestion des exceptions en python