我正在使用Emacs Org-mode Babel源代码块来编写和使用一些小函数。现在我想多做一点。说过一段时间后,我发现我在Org-babel中编写的函数对于重用很有价值,我想将它放入我的个人python包中,例如my_tools。
因此,org-babel提供了源代码的提取,比方说,我将源代码提取到名为NULL
的文件中,该文件中包含examples.py
和func1
。我想将这些函数添加到名为func2
的python文件/模块中,是否有python包或最佳实践来执行此类操作,因此将插入my_functions.py
,func1
的源代码进入模块?
对我而言,这是我试图做一段时间的事情,通常,在使用python时,我们只编写一次使用的代码,稍后,我们可能会发现一些代码/函数一次又一次地被重用,因此我们希望将其保存到包中,以便可以轻松地安装和共享。
我们甚至可以在代码中添加标签,以便在提取并将其插入包模块时,它根据标签信息知道要插入的位置。我在这里很模糊,知道是否已经存在这样的场景的PyPI包,或者如果我想为自己构建这样的包,我应该如何构建包。我不是那么有经验,我想听听有关这方面的意见。
答案 0 :(得分:1)
这应该是可以使用源代码“纠缠”到文件和noweb
语法来将单个部分收集到更大的整体中。以下是该方法的说明:
* 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
进行纠缠,在foo
子目录(必须已存在)中获取名为./tangled
的文件,其内容为:
(message "Package stuff")
(princ "Hello")
(princ "Goodbye")
这个的pythonization应该是直截了当的,但是你所描述的更高级的方面(使用标签来选择函数,例如)肯定没有解决这个问题(而且我不知道如何将它们放在我的顶部。头)。
答案 1 :(得分:0)
我很擅长保持简单。如果我理解你的要求 正确地说,你的主要兴趣是生成python源文件和 模块而不是执行python代码并将结果用于或 复制回组织文件。
如果是这种情况,我认为您最好的办法就是拥有一个组织文件 代表你的/ tools / module。当你找到一个功能等你 继续使用不同的文件/项目,哪些应该进入你的工具 模块,将该功能代码块添加到代表您的工具的组织文件中 模块(以及适当的文档等)。然后,更新您的其他组织文件 它表示程序的不同代码块以加载该模块 并参考该功能。
在代表您的工具模块的组织文件中,您可以使用一些组织 执行代码以合并测试等的功能。这样,您就可以 加载您的组织文件并让它执行测试以变更所有实用程序 模块中的功能正在运行。
在您的其他项目中,只需编写源块以获取函数 从您的实用程序模块。不要担心使用组织尝试和幻想 引用等。把事情简单化。您可以使用组织链接来引用 到代表工具箱模块的组织文件以获取文档 引用。
另一方面,如果你想做像python实验室书籍系统那样的事情, 从组织文件中运行python代码并获取结果的位置 您用于文档或作为其他块的输入,那么您需要使用 一些先进的noweb功能,用于处理更复杂的块引用和 传递参数等你也可以找到babel库 有用。
14.6巴别图书馆 =====================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'.