Obtenez le nom de la branche git et le nom de la balise avec python

introduction

Lorsque vous souhaitez gérer le modèle, le fichier de génération intermédiaire, la précision et d'autres résultats en même temps dans un système d'apprentissage automatique, vous souhaitez gérer non seulement le code en coupant la branche sur Github mais également en utilisant un stockage tel que S3.

Outils existants

Si vous souhaitez résoudre le même problème avec les outils existants, il semble préférable d'utiliser mlflow.

Cependant, que vous gériez la version avec mlflow ou que vous développiez votre propre application de gestion avec flask etc., ceux qui ont unifié le nom de branche de git et le nom d'objet de S3 J'avais le sentiment que c'était bien.

Il existe également un désir de vérifier l'étiquette de libération qui a été coupée dans le passé et de reproduire la valeur estimée à ce moment-là.

J'ai donc écrit le code Python pour obtenir toutes les balises de branche et de version distantes actuelles.

import subprocess
import pandas as pd


def get_current_branch(repository_dir='./') -> str:
    '''Obtenez le nom actuel de la succursale
    Args:
        repository_dir(str):Répertoire avec référentiel
    Return:
        str
    '''
    cmd = "cd %s && git rev-parse --abbrev-ref HEAD" % repository_dir
    proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    proc.wait()
    stdout_data = proc.stdout.read()
    # stderr_data = proc.stderr.read()
    current_branch = stdout_data.decode('utf-8').replace('\n','')
    return current_branch


def get_remote_tags(repository='./') -> pd.core.frame.DataFrame:
    '''Obtenir des balises distantes
    Args:
        repository(str):Répertoire avec référentiel ou URL du référentiel(Exemple: https://github.com/mlflow/mlflow )
    Returns:
        pd.core.frame.DataFrame
    Note:
Si vous voulez obtenir une branche au lieu d'une balise,De cmd'--tags'À'-h'Vous pouvez le changer en.
    '''
    if repository.startswith('https://github.com/'):
        cmd = "git ls-remote --tags %s" % repository
    else:
        cmd = "cd %s && git ls-remote --tags" % repository
    proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    proc.wait()
    stdout_data = proc.stdout.read()
    # stderr_data = proc.stderr.read()
    if stdout_data:
        tag_df = pd.DataFrame([r.split('\t') for r in stdout_data.decode('utf-8').split('\n')], columns=['hash', 'tag_name'])
        return tag_df.dropna(how='any')
    else:
        print('cannot find tags.')
        return pd.DataFrame(columns=['hash', 'tag_name'])

Recommended Posts

Obtenez le nom de la branche git et le nom de la balise avec python
[Python] Récupère le nom de la variable avec str
Obtenez date avec python
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Obtenez des images et des vidéos de la chronologie des médias avec Python + Tweepy
Obtenez des commentaires sur youtube Live avec [python] et [pytchat]!
Recevoir des e-mails de Gmail et étiqueter avec Python3
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Obtenez le code du pays avec python
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Obtenez la chronologie Twitter avec Python
Syntaxe Ruby et Python ~ branch ~
Obtenir l'ID de thread avec python
Commencez avec Python! ~ ② Grammaire ~
python avec pyenv et venv
[python] Obtenir le quotient et le surplus
Obtenez des stocks avec Python
Obtenir le répertoire personnel avec python
Obtenir un événement de clavier avec python
Obtenez des informations sur l'alambic avec Python
Fonctionne avec Python et R
Comparez HTTP GET / POST avec cURL (commande) et Python (programmation)
Débarrassez-vous des données sales avec Python et les expressions régulières
Exemple d'analyse HTTP GET et JSON avec Pepper Python
Bibliothèque pour spécifier un serveur de noms en python et dig
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
Communiquez avec FX-5204PS avec Python et PyUSB
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Lien pour commencer avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
[Python] Obtenez des données économiques avec DataReader
Encodage et décodage JSON avec python
Comment démarrer avec Python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
[Petite histoire] Obtenez l'horodatage avec Python
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Obtenez les tendances Qiita avec le scraping Python
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Obtenez le nom d'hôte en Python
Coexistence de Python2 et 3 avec CircleCI (1.0)
Démarrez avec Python avec Blender
Obtenez des informations météorologiques avec Python et le grattage
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Résolvez le problème du sac à dos Python avec la méthode de branche et liée
Formatez le journal Git et obtenez le nom du fichier validé au format csv