Eine Aufzeichnung zum Patchen eines Python-Pakets

ich bin ein böser Junge

** Hinweis: Dieser Artikel ist eine anständige Nische **

Ich wollte unbedingt eine Funktion, die nicht in dem von mir verwendeten Python-Paket enthalten war. Manchmal müssen Forscher Dinge vorbereiten, die andere nicht benutzen. Die Funktion ist jedoch eine Nische, und [^ douki] kann nicht als Pull-Anforderung empfangen werden. Also habe ich einen Patch gemacht.

Eigener Patch? Was ist los mit git?

Wie Sie wissen, gibt es in der UNIX-Serie einen Befehl namens patch. Benutze das. Es ist okay mit git, aber ** Ich wollte in die Zeitung schreiben "Ich habe keine merkwürdigen Änderungen vorgenommen. Der Unterschied ist nur hier." (Wichtig). ** **.

Erstellungsverfahren

Sie können die vorgenommenen Änderungen mit git diff ausgeben. Verwenden Sie also git, um den Patch zu erstellen. Es ist auch gut, die Geschichte zurückspulen zu können. Also benutze ich doch git.

Zuerst musste ich zum Quellcode des Pakets springen, mit dem ich es bearbeitet hatte. Egal wo Sie sich in der virtuellen Umgebung befinden, Sie können mit einem Liner arbeiten. Ich schrieb den folgenden Hoge um und flog davon.

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

Verwalten Sie git vor dem Bearbeiten vorerst.

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

Nun, git add * kann sogar den Cache enthalten, das ist also angemessen. Ich bin ein Vimmer, also bearbeite ich mit Vim, aber natürlich muss es nicht Vim sein. Diff, wenn Sie alle Änderungen vorgenommen haben.

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

Damit ist die Patch-Erstellung abgeschlossen.

Quellcode

Unten finden Sie ein Shell-Skript zum Anwenden des vorherigen Patches auf das Paket. Im Folgenden wird das zuvor erstellte complex.patch auf das mne-Paket angewendet. Ich habe einige Optionen.

--- R: Patch zurücksetzen --- p: Zeigt den Pfad des entsprechenden Pakets an --- h: Hilfe

Der Pfad dieses Pakets wird angezeigt, wenn ich etwas bearbeiten möchte

cd $(sh ./patcher -p)

Optional können Sie unter das Paket springen. Selbst in einer virtuellen Umgebung wird es natürlich mit dem Willen des Eisens fliegen.

#!/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

Impressionen

Ich möchte das Paket nicht wirklich umschreiben, auch nicht zu Forschungszwecken. Würzig ... (´ ・ ω ・ `)

[^ douki]: Ich wollte Gehirnwellen von Wavelet transformieren, um den Durchschnitt der Absolutwerte aus komplexen Zahlen zu berechnen und die Größe der Gehirnwellen im Gehirn zu schätzen, aber ich wollte komplexe Zahlen anstelle von durchschnittlichen Absolutwerten. Es ist. Die Berechnungskosten werden gefährlich, weil sie nicht gemittelt werden.

Recommended Posts

Eine Aufzeichnung zum Patchen eines Python-Pakets
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Eine gute Beschreibung der Python-Dekorateure
[Python] Ein Memorandum der schönen Suppe4
Eine kurze Zusammenfassung der Python-Sammlung
Aufzeichnung der Höllenstunden, die Python-Anfängern auferlegt wurden
Einführung des Python-Zeichenpakets Pygal
Aufzeichnung der Python-Einführung für Neulinge
Memorandum des Python-Paketverwaltungstools ez_setup
Zeigen Sie eine Liste der Alphabete in Python 3 an
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
Verbinde viel Python oder und und
[Python] Ruft eine Liste der Instanzvariablen ab
[Python] [Meta] Ist der Python-Typ ein Typ?
Erstellen Sie eine Deb-Datei aus einem Python-Paket
Die Geschichte der Verarbeitung A von Blackjack (Python)
[Python] Nur eine Liste der Ordner abrufen
Memorandum zum Löschen von Python-Strings
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Einführung von Python
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
[AtCoder] Lösen Sie ein Problem von ABC101 ~ 169 mit Python
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
[Python] Erstellen Sie eine Liste mit verschiedenen Zeichentypen
Holen Sie sich den Aufrufer einer Funktion in Python
Ein Memorandum zum Aufrufen von Python aus Common Lisp
Kopieren Sie die Liste in Python
Memorandum der Extraktion durch Python BS4-Anfrage
Löse A ~ D des Yuki-Codierers 247 mit Python
Umschreiben von Elementen in einer Listenschleife (Python)
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Erstellen Sie in Python ein Paket mit globalen Befehlen
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
Berücksichtigung der Stärken und Schwächen von Python
Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
[Python] Operation der Aufzählung
Liste der Python-Module
Ein * Algorithmus (Python Edition)
[Python] Ein Programm, das die Anzahl der Täler zählt
Memo mit Python mit HiveServer2 von EMR verbunden
[Python] Machen Sie einen Screenshot
(Python) Behandeln Sie ganzzahlige Werte als eine Reihe von Flags
Empfehlung zum Erstellen einer tragbaren Python-Umgebung mit conda
Erstellen Sie ein Python-Modul
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Erstellen Sie eine Kopie einer Google Drive-Datei aus Python
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Pythons Lambda-Ausdruck ...
Grundlagen der Python-Scraping-Grundlagen
Eine Code-Sammlung, die häufig in persönlichem Python verwendet wird