[PYTHON] Schließen Sie den ersten Import des Moduls an und drucken Sie den Modulpfad

Haken Sie zum ersten Mal ein und drucken Sie den Modulpfad

TL;DR

Motivation

[^ 1]: Um genau zu sein, auf Mayas Python-Interpreter. [^ 2]: zensiert.

Code

firstimport_hook.py


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

import __builtin__
import types
import copy
import sys

import inspect

# reload()Für Gegenmaßnahmen__import__Speichern Sie nach Bestätigung, dass es sich um eine integrierte Funktion handelt.
if isinstance(__import__, types.BuiltinFunctionType):
    _original__import__ = copy.deepcopy(__import__)

#Zum Beispiel, wenn es von einem anderen Modul eingebunden importiert wird
# _original__import__Kann nicht definiert werden, werfen Sie also einen entsprechenden Fehler
elif '_original__import__' not in globals():
    raise ImportError('Definition of _original__import__ failed.')


def __get_modulefile_from_load_module():
    try:
        #Holen Sie sich die Moduldatei zum Lesen
        currentframe = inspect.currentframe()
        module_file = currentframe.f_back.f_back.f_code.co_filename
    finally:
        #Entf, um den Referenzzähler zu korrigieren.
        del currentframe

    return module_file


def print_modulefile_post_first_import(*args, **kwargs):
    """Moduldateien nach dem ersten Import anzeigen"""

    #Rufen Sie vor dem Import den Ladestatus des Moduls ab
    loaded_module_names = sys.modules.keys()

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

    #Verarbeiten Sie keine Module, die bereits einmal geladen wurden
    if module.__name__ in loaded_module_names:
        return module

    # __file__Zeigen Sie den Pfad des Moduls nicht ohne an
    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():
    """Import-Hook aktivieren"""
    __builtin__.__import__ = print_modulefile_post_first_import


def disable_import_hook():
    """Import-Hook deaktivieren"""
    __builtin__.__import__ = _original__import__


if __name__ == '__main__':
    #Import-Hook aktivieren
    enable_import_hook()

    import json
    reload(json)

startup.py


import firstimport_hook
firstimport_hook.enable_import_hook()

Schließlich

Wenn Sie jetzt zum ersten Mal eine Python-Datei importieren, können Sie den Pfad des geladenen Moduls drucken (). Wenn Sie es anschließend ordnungsgemäß an den Server senden, kann es aggregiert werden.

mel? Du weißt nicht ...

Recommended Posts

Schließen Sie den ersten Import des Moduls an und drucken Sie den Modulpfad
[Einführung in die Udemy Python3 + -Anwendung] 69. Import des absoluten Pfads und des relativen Pfads
Überprüfen Sie den Pfad des importierten Python-Moduls
So greifen Sie auf die globale Variable des importierten Moduls zu
[Selen] Wie wird der relative Pfad des Chromedriver angegeben?
[Python of Hikari-] Kapitel 08-03 Modul (Import und Verwendung der Standardbibliothek)
Erleichtern Sie die Anzeige von Python-Modulausnahmen
Ich möchte die Natur von Python und Pip kennenlernen
Befehle und Dateien zum Überprüfen der Version von CentOS Linux
26.11.2015 Python> Funktionsliste des Moduls anzeigen> Mathematik importieren> Verzeichnis (Mathematik)
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten
Finden Sie den kritischen Pfad von PERT mithilfe der Breitenprioritätssuche und der Tiefenprioritätssuche
Hinweis: Holen Sie sich das erste und letzte Element von Python OrderedDict zerstörungsfrei
[EC2] So installieren Sie Chrome und den Inhalt jedes Befehls
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Über den Fehler, dass Anaconda Numpy und Scipy nicht importieren kann
Die erste künstliche Intelligenz. So überprüfen Sie die installierte Version von Tensorflow.
Ich habe zusammengefasst, wie die Boot-Parameter von GRUB und GRUB2 geändert werden
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
Testen Sie die Version des Argparse-Moduls
Die Geschichte von Python und die Geschichte von NaN
Verwendung des optparse-Moduls
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
Holen Sie sich das erste Element von Queryset
Bitte beenden Sie das Drucken und importieren Sie die Protokollierung für die Protokollausgabe
Verwendung des ConfigParser-Moduls
Ergänzung zur Erklärung von vscode
[Python Kivy] So erhalten Sie den Dateipfad durch Ziehen und Ablegen
Ford-Falkerson-Methode und ihre Anwendungen-Ergänzung zu Kapitel 8 der Algorithmus-Kurzreferenz-
[Python] So legen Sie die Position und Größe der Fensteranzeige von matplotlib fest
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Python> sys.path> Liste der Zeichenfolgen, die den Pfad für die Suche nach Modulen angeben
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Ich habe versucht, die optimale Route des Traumlandes durch (Quanten-) Tempern zu finden
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich möchte die Gefühle von Menschen analysieren, die sich treffen und zittern wollen
__Getattr__ und __getattribute__, um die Erfassung von Objektattributen durch Punkte anzupassen
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
Die Geschichte des Versuchs, den Client wieder zu verbinden
Dies und das der Einschlussnotation.
Skript zum Ändern der Beschreibung von Fasta
So überprüfen Sie die Version von Django
Die Geschichte, MeCab in Ubuntu 16.04 zu setzen
Überprüfen Sie das Konzept und die Terminologie der Regression
Koexistenz von Flask-Protokollierung und anderer Modulprotokollierung
Rufen Sie den Pfad zur systemd-Einheitendatei ab
So importieren Sie Ihr eigenes Modul mit jupyter
[Python] Importieren Sie das Modul eine Ebene höher
Drucken Sie den Pfad des Include-Headers mit clang
Die Geschichte, deep3d auszuprobieren und zu verlieren
Die Geschichte von pep8 wechselt zu pycodestyle
Importieren Sie, indem Sie den Verzeichnispfad direkt angeben
Modulimport und Ausnahmebehandlung in Python