Un enregistrement de patcher un package python

Je suis un mauvais garçon

** Remarque: cet article est une niche décente **

J'étais en train de mourir d'envie d'une fonctionnalité qui n'était pas dans le package python que j'utilisais. Parfois, les chercheurs doivent préparer des choses que d'autres n'utilisent pas. Cependant, la fonction est une niche, et [^ douki] ne peut pas être reçu en tant que pull request. Alors j'ai fait un patch.

Propre patch? Quel est le problème avec git?

Comme vous le savez, il existe une commande appelée patch dans la série UNIX. Utilisez ceci. C'est bien avec git, mais ** je voulais écrire dans l'article "Je n'ai pas fait de changements étranges. La différence n'est qu'ici." (Important). ** **

Procédure de création

Vous pouvez afficher les modifications que vous avez apportées en faisant git diff. Utilisez donc git juste pour créer le patch. Il est également bon de pouvoir remonter l’histoire. Donc, après tout, j'utilise git.

Tout d'abord, j'ai dû passer au code source du package que j'utilisais pour le modifier. Peu importe où vous vous trouvez dans l'environnement virtuel, vous pouvez utiliser une seule doublure. J'ai réécrit le hoge suivant et je me suis envolé.

cd $(python -c "import hoge as target; from pathlib import Path; print(Path(target.__file__).parent)")

Donc, avant de modifier, gérez git pour le moment.

git init
git add *
git commit
git branch patch
git checkout patch
vim hoge.py

Eh bien, git add * peut même inclure le cache, donc c'est approprié. Je suis un vimmer, donc j'édite avec vim, mais bien sûr, il n'est pas nécessaire que ce soit vim. Difficulté lorsque vous avez terminé les modifications.

mkdir ~/warui_patch
git diff > ~/warui_patch/complex.patch

Ceci termine la création du patch.

Code source

Vous trouverez ci-dessous un script shell pour appliquer le correctif précédent au package. Ci-dessous, le complex.patch créé précédemment est appliqué au package mne. J'ai quelques options.

--- R: retour du patch --- p: Afficher le chemin du package correspondant --- h: Aide

Le chemin de ce package s'affiche lorsque je souhaite modifier quelque chose

cd $(sh ./patcher -p)

En option, il vous permet de sauter sous le paquet. Bien sûr, même dans un environnement virtuel, il volera avec la volonté du fer.

#!/usr/bin/env sh
OPT=$1
PACKAGE='mne'
PATCH='complex.patch'

make_python_path_code () {
  echo "import $PACKAGE; from pathlib import Path; print(Path($1.__file__).parent)"
}

make_python_path () {
  echo "$(python -c "$(make_python_path_code $1)")/"
}

patch_python () {
  patch $OPT -u -p 1 -d $(make_python_path $1) < $2
}

if [ "$1" = "-h" ]; then
  echo Patch script for python.
  echo ========================
  echo -h: Show this message
  echo -R: Reverse patch
  echo -p: Print script dir
  exit
fi
if [ "$1" = "-p" ]; then
  echo $(make_python_path $PACKAGE)
  exit
fi
patch_python $PACKAGE $PATCH

Impressions

Je ne veux pas vraiment réécrire le paquet, même à des fins de recherche. Épicé ... (´ ・ ω ・ `)

[^ douki]: Je voulais transformer les ondes cérébrales en ondelettes pour calculer la moyenne des valeurs absolues à partir de nombres complexes et estimer la taille des ondes cérébrales dans le cerveau, mais je voulais des nombres complexes au lieu de valeurs absolues moyennes. Il est. Le coût de calcul devient dangereux car il n'est pas moyenné.

Recommended Posts

Un enregistrement de patcher un package python
Environnement enregistré pour l'analyse des données avec Python
Une bonne description des décorateurs Python
[Python] Un mémorandum de belle soupe4
Un bref résumé de la collection Python
Record des leçons de l'enfer imposées aux étudiants débutants en Python
Introduction du package de dessin python pygal
Enregistrement de l'introduction de Python pour les nouveaux arrivants
Mémorandum de l'outil de gestion de paquets Python ez_setup
Afficher une liste d'alphabets en Python 3
Créer un diagramme de relations des modules Python
Connectez beaucoup de Python ou et et
[python] Obtenir une liste de variables d'instance
[python] [meta] Le type de python est-il un type?
Créer un fichier deb à partir d'un package python
L'histoire du traitement A du blackjack (python)
[Python] Obtenir une liste de dossiers uniquement
Mémorandum du processus de suppression de chaîne python
Les bases de Python ①
Bases de python ①
Copie de python
Introduction de Python
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Dessiner un graphique d'une fonction quadratique en Python
[python] Créer une liste de différents types de caractères
Récupérer l'appelant d'une fonction en Python
Un mémorandum sur l'appel de Python à partir de Common Lisp
Copiez la liste en Python
Mémorandum d'extraction par requête python bs4
Résolvez A ~ D du codeur yuki 247 avec python
Réécrire des éléments dans une boucle de listes (Python)
Écrire une note sur la version python de python virtualenv
Créez un tracé de R semblable à un joyplot avec python
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
Touchons une partie de l'apprentissage automatique avec Python
Créer un package contenant des commandes globales en Python
[Python] Une compréhension approximative des itérables, des itérateurs et des générateurs
Prise en compte des forces et faiblesses de Python
Autour de l'authentification de PyDrive2, un package pour faire fonctionner Google Drive avec Python
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
[Python] Implémentation du clustering à l'aide d'un modèle gaussien mixte
[Python] Opération d'énumération
Liste des modules python
Algorithme A * (édition Python)
[Python] Un programme qui compte le nombre de vallées
Mémo connecté à HiveServer2 d'EMR avec python
[Python] Prenez une capture d'écran
(Python) Traite les valeurs entières comme un ensemble d'indicateurs
Recommandation de construction d'un environnement Python portable avec conda
Créer un module Python
Unification de l'environnement Python
Copie des préférences python
Faire une copie d'un fichier Google Drive à partir de Python
Découpez une partie de la chaîne à l'aide d'une tranche Python
expression lambda de python ...
Principes de base du grattage Python
Une collection de code souvent utilisée dans Python personnel