Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen

"Exploring Large-Scale Software" ist ein auswählbares Experiment für die Abteilung für elektronische Informationstechnik / Abteilung für Elektrotechnik und Elektronik (eeic), Fakultät für Ingenieurwissenschaften, Universität Tokio. Dies ist eine Verbesserung / Erweiterung eines großen Programms, das als OSS (Open Source Software) veröffentlicht wurde, und es ist schwierig, das gesamte Bild zu erfassen, das von einem kleinen Programm, das normalerweise im Unterricht behandelt wird, nicht berührt werden kann. Es geht darum zu lernen, wie man mit Programmen umgeht. Wir haben uns entschlossen, Python zu erkunden, mit dem wir im Unterricht vertraut sind.

Verknüpfung

Umgebung

Vorbereitung

Erstellen Sie zunächst ein Arbeitsverzeichnis (hier ~ / cpython). Duplizieren Sie das Repository von Python3.10 (cpython) auf Github mit git clone.

terminal


$ mkdir cpython
$ cd cpython
$ git clone https://github.com/python/cpython

Bauen

Erstellen Sie ein Makefile mit configure. Verwenden Sie zu diesem Zeitpunkt die Option "--prefix", um endgültig zu entscheiden, wo das Programm platziert werden soll (hier "~ / python-install"). Sie können der Umgebungsvariablen "CFLAGS" auch "-O0" hinzufügen, um die Optimierungsstufe zu verringern, und "-g" hinzufügen, um das "Debug-Symbol" in die ausführbare Datei aufzunehmen. Auf diese Weise können Sie gdb verwenden, um das Verhalten Ihres Programms Zeile für Zeile zu verfolgen.

Nachdem Sie ein Makefile mit configure erstellt haben, kompilieren und installieren Sie es mit make und make install.

terminal


$ CFLAGS="-g -O0" ./configure --prefix=/home/[username]/python-install/
$ make 
$ make install

Damit ist der Build abgeschlossen, und Sie können Python starten, indem Sie "~ / python-install / bin / python3" ausführen. Wenn Sie den Code ändern, müssen Sie "sauber machen" und dann "machen" ausführen.

Verfolgen Sie mit dem Debugger

Starten Sie Emacs und gehen Sie mit dem Befehl M-x shell zu~ / python-install / bin /. Sobald ich es verschieben konnte, drückte ich M-x gud-gdb und gdb --fullname python3, um gdb zu starten und benutzte es, um das Programm zu verfolgen.

Referenzmaterial

** Erkundung umfangreicher Software **

** Offizielle CPython-Dokumentation (Ändern der CPython-Grammatik) ** ** Offizielle CPython-Dokumentation (Design des CPython-Compilers) **

** offizielles GNU-Readline-Dokument **

--Dies ist das Dokument, auf das in Hinzufügen einer Funktion zum automatischen Einrücken zu Python verwiesen wird.

** Einführung in das Ändern von Python **

-Dies ist ein Artikel von EEICs Senior, der Python die Instant-Anweisung hinzugefügt hat. Beim Ändern von Python habe ich darauf hingewiesen, womit ich beginnen soll.

Recommended Posts

Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Eine Geschichte über Python Pop und Append
Über Python-Diktat und sortierte Funktionen
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
Ein Java-Programmierer studierte Python. (Über Funktionen (Methoden))
[Python] Memo über Funktionen
Eine Geschichte, die von Go's globalen Variablen und ihrem Umfang abhängig ist
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Die Geschichte, mit Python eine Hanon-ähnliche Partitur zu machen
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Eine Geschichte über Kindergärten, Kindergärten und Kindergärten
Informationen zum Erstellen und Ändern von benutzerdefinierten Designs für Python IDLE
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Memorandum über Korrelation [Python]
Ein Memorandum über den Python-Mock
Über Python und reguläre Ausdrücke
Python 3 Sortier- und Vergleichsfunktionen
Informationen zu Python- und Betriebssystemoperationen
Funktionen höherer Ordnung und Einschlussnotation in Python
Python # Über Referenz und Kopie
Über Python sort () und reverse ()
Ein Hinweis zu [Python] __debug__
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ①
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Python a + = b und a = a + b sind unterschiedlich
Die Geschichte von Python und die Geschichte von NaN
Informationen zur Installation der Serien Pwntools und Python2
[Python] Verwalten Sie Funktionen in einer Liste
Eine erfrischende Geschichte über Slice in Python
Python: Ein Hinweis zu Klasse 1 "Abstract"
Eine launische Geschichte über Slice in Python
Über Python und Cython dtype
Über Python Pickle (cPickle) und Marschall
[Python] Über Executor und zukünftige Klassen
Über Python, aus und importieren, als
Die Geschichte der Verwendung von Python reduziert
Seltsame und schreckliche Python-Fehlergeschichte
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Ein bisschen mehr über Referenzen ~ Verwenden von Python und Java als Beispiele ~
Eine Geschichte über die Entwicklung eines weichen Typs mit Firestore + Python + OpenAPI + Typescript
Eine Geschichte über alles von der Datenerfassung über die KI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python (3. KI-Entwicklung)
Eine Geschichte, die es aufgegeben hat, JavaScripthon unter Windows auszuführen.
Eine Geschichte über einen magischen Umbau, der Lubuntu in ein Chromebook bringt
Eine Geschichte, die Slack und Google Spreadsheet verbindet
Eine Geschichte über die Automatisierung von Online-Mahjong (Jakutama) mit OpenCV und maschinellem Lernen
Eine Geschichte über mein neues Python-Studium nach 3 Jahren MATLAB-Erfahrung
Ein Java-Programmierer studierte Python. (Über Typ)
Eine Geschichte über maschinelles Lernen mit Kyasuket
Ein Memo mit Python2.7 und Python3 in CentOS
Verbinde viel Python oder und und
Python-Funktionen
Die Geschichte, den Versuch aufzugeben, mit Heroku eine Verbindung zu MySQL herzustellen