2017-03-09 6 views
0

Ich benutze Emacs Org-Modus Babel Quellcode-Block zu schreiben und einige kleine Funktionen zu verwenden. Jetzt möchte ich ein bisschen mehr machen. Nach einer Weile habe ich festgestellt, dass die Funktion, die ich in Org-babel geschrieben habe, für die Wiederverwendung wertvoll ist. Ich möchte sie in mein persönliches Python-Paket einfügen, z. B. my_tools.kombinieren Quellcode aus verschiedenen Dateien

So org-babel bieten Extraktion des Quellcodes, sagen wir, ich habe den Quellcode in eine Datei namens , die func1 und func2 in der Datei hat extrahiert. Ich möchte diese Funktionen in eine Python-Datei/Modul namens my_functions.py hinzufügen, gibt es ein Python-Paket oder Best Practice, um so etwas zu tun, so wird der Quellcode von func1, func2 in das Modul eingefügt?

Für mich ist es etwas, was ich versuche für eine Weile zu tun, normalerweise, wenn wir mit Python arbeiten, schreiben wir nur den Code für die einmalige Verwendung, später finden wir einige Code/Funktionen werden immer wieder verwendet Daher möchten wir es in einem Paket speichern, damit es leicht installiert und mit anderen geteilt werden kann.

Wir können dem Code sogar Tags hinzufügen, damit er beim Extrahieren und Einfügen in das Paketmodul basierend auf den Taginformationen weiß, wo er eingefügt werden soll. Ich bin hier ein bisschen unscharf, um zu wissen, ob es bereits ein PyPI-Paket für ein solches Szenario gibt oder wie ich das Paket erstellen soll, wenn ich es selbst erstellen möchte. Ich bin nicht so erfahren und möchte dazu Meinungen hören.

+0

Dies scheint eine seltsame Anfrage. Warum schreiben Sie nicht einfach zuerst Ihre Funktionen in ein Modul? –

+0

@ juanpa.arrivillaga Ich denke, er spricht nur davon, ein pip installierbares Paket zu machen, da dies seine Frage beantworten würde. Sobald er das Paket erstellt und installiert hat, kann er seine Methoden überall verwenden – lordingtar

+0

@lrentaldar Da ich nicht Emacs Org-Modus Babel verwende, bin ich nicht ganz sicher, was OP will. Es scheint mir jedoch, dass sie programmatisch bestimmte Funktionen aus separaten Quelldateien in ein neues Paketmodul "ausschneiden und einfügen" wollen. "Wir können dem Code sogar Tags hinzufügen, damit er beim Extrahieren und Einfügen in das Paketmodul anhand der Tag-Informationen weiß, wo er eingefügt werden muss." –

Antwort

0

Ich bin ein großer Fan der Dinge einfach zu halten. Wenn ich Ihre Anforderungen richtig verstehe, besteht Ihr primäres Interesse darin, Python-Quelldateien und Module zu generieren, statt Python-Code auszuführen und die in oder verwendeten Ergebnisse in die Organisationsdatei zurückkopieren zu lassen.

Wenn dies der Fall ist, denke ich, ist Ihre beste Vorgehensweise, nur eine Organisationsdatei , die Ihr/tools/Modul darstellt. Wenn Sie eine Funktion etc finden, die Sie weiter verwenden in verschiedenen Dateien/Projekten und die in Ihre Werkzeuge Modul gehen sollten, fügen Sie diesen Funktionscode Block in die Organisationsdatei, die Ihre Werkzeuge Modul (zusammen mit entsprechenden Dokumenten usw.). Aktualisieren Sie dann Ihre anderen Organisationsdateien , die die verschiedenen Codebausteine ​​Ihres Programms darstellen, um dieses Modul zu laden und auf diese Funktion zu verweisen.

In der org-Datei, die Ihr Werkzeug-Modul darstellt, Sie Funktionalität einige Org nutzen könnten, den Code zu integrieren Tests usw. Auf diese Weise ausführen, können Sie Ihre org-Datei laden und haben sie die Tests durchführen alle varify Das Dienstprogramm Funktionen in Ihrem Modul funktionieren.

Schreiben Sie in Ihren anderen Projekten einfach Ihre Quellblöcke, um die Funktionen von Ihrem Dienstprogramm zu beziehen. Mach dir keine Sorgen über die Verwendung von org zu versuchen und Lust auf Referenzierung oder dergleichen. Halte es einfach. Sie können Organisationslinks verwenden, um auf Ihre Organisationsdateien zurückzugreifen, die Ihre Toolbox-Module repräsentieren, um die Dokumentation Referenzen zu erhalten.

Wenn auf der anderen Seite, wollen Sie so etwas wie ein Python-Labor Buch System zu tun, wo Sie Python-Code aus der org-Datei ausführen und die Ergebnisse zurück, die Sie für die Dokumentation verwenden oder als Input für andere Blöcke, dann müssen Sie einige der fortgeschrittenen noweb-Funktionen verwenden, um komplexere Blockreferenzen und Argumente umgangen usw. zu behandeln. Sie können auch die Bibliothek von babel nützlich finden.

14,6 Bibliothek von Babel =====================

The "Library of Babel" is a collection of code blocks. Like a function 
library, these code blocks can be called from other Org files. This 
collection is in a repository file in Org mode format in the `doc' 
directory of Org mode installation. For remote code block evaluation 
syntax, *note Evaluating code blocks::. 

    For any user to add code to the library, first save the code in 
regular `src' code blocks of an Org file, and then load the Org file 
with `org-babel-lob-ingest', which is bound to `C-c C-v i'. 
0

Dies sollte möglich sein mit "Verheddern" von Quellcode in Dateien und noweb Syntax, um einzelne Stücke zu einem größeren Ganzen zu sammeln. Im Folgenden wird als eine Darstellung des Verfahrens gemeint:

* Individual code blocks 

#+name: foo 
#+BEGIN_SRC elisp 
(princ "Hello") 
#+END_SRC 

and another one: 

#+name: bar 
#+BEGIN_SRC elisp 
(princ "Goodbye") 
#+END_SRC 

* Combine them together 

#+BEGIN_SRC elisp :tangle ./tangled/foo :noweb yes 
(message "Package stuff") 
<<foo>> 
<<bar>> 
#+END_SRC 

C-c C-v C-t Verwendung zu verwirren, bekommt man eine Datei foo benannt, in dem ./tangled Unterverzeichnis (das bereits vorhanden sein muss), dessen Inhalt:

(message "Package stuff") 
(princ "Hello") 
(princ "Goodbye") 

Die pythonization von diesem sollte geradlinig sein, aber die fortgeschritteneren Aspekte von, was Sie beschreiben (unter Verwendung der Umbauten, um Funktionen zB auszuwählen), werden sicher nicht dadurch adressiert (und ich bin nicht sicher, wie man sie von meiner Spitze tut Kopf).

Verwandte Themen