跳转到主要内容

交互式MacroPy - IPython REPL,可嵌入REPL,启动器。

项目描述

Imacropy

Imacropy是交互式MacroPy。

我们为MacroPy提供了一些敏捷开发插件,例如

  • imacropy.iconsole,IPython扩展。 在IPython REPL中使用宏

  • imacropy.console.MacroConsole,相当于code.InteractiveConsole的宏启用版本。 嵌入支持宏的REPL

  • macropy3,适用于宏启用Python程序的通用启动器。 在您的主程序中使用宏

自v0.2.0版本以来有所更改。 由于添加了更值得imacropy.console模块名的MacroConsole,IPython扩展已被重命名为imacropy.iconsole(注意第二个i)。请更新您的IPython配置文件。这是一个永久性重命名,iconsole将不再重命名。

IPython扩展

该扩展允许在IPython REPL中 使用宏。 (在REPL中定义 宏目前不受支持。)

例如

In [1]: from simplelet import macros, let

In [2]: let((x, 21))[2*x]
Out[2]: 42

从给定模块导入宏的操作将清除REPL会话中从该模块加载的所有当前宏,并从磁盘加载仅指定的宏的最新定义。这允许在编辑宏时进行交互式测试。

任何给定宏的最新定义将保持活动状态,直到同一模块的下一个宏导入操作,或者直到IPython会话结束。

宏文档字符串和源代码可以使用通常的???查看。

自v0.3.1版新增。 行魔法%macros现在会打印当前导入到REPL会话中的宏的可读列表(如果有的话,则表示没有导入宏)。

加载扩展

要一次性加载扩展,请输入%load_ext imacropy.iconsole

要在IPython启动时自动加载,将字符串"imacropy.iconsole"添加到ipython_config.py中的c.InteractiveShellApp.extensions列表。要查找配置文件,请使用ipython profile locate

扩展加载时,它会将macropy导入REPL会话。如果需要,您可以使用它来调试是否已加载。

目前没有打印启动横幅,因为扩展加载发生在IPython打印自己的横幅之后。我们无法手动打印横幅,因为一些工具(特别是Emacs中的importmagic.el,包含在Spacemacs中)将这种情况视为Python解释器启动时的致命错误(并且ipython3 --no-banner作为python-shell非常方便,可以在Emacs的子shell模式下运行IPython)。

MacroConsole

这是code.InteractiveConsole的衍生品和直接替代品,允许您嵌入一个支持宏的REPL。与macropy.core.console.MacroConsole的不同之处在于,它提供了与IPython扩展相同的语义。我们还提供了???语法来查看文档字符串和源代码。

from imacropy.console import MacroConsole
m = MacroConsole()
m.interact()

现在我们处于一个启用了宏的REPL中

from unpythonic.syntax import macros, let
x = let[((a, 21)) in 2 * a]
assert x == 42

就像在code.InteractiveConsole中一样,退出REPL(Ctrl+D)将返回到interact()调用。

宏文档字符串和源代码可以像在IPython中一样查看

let?
let??

如果信息可用,这些操作还会打印出在文件中定义查询对象的文件名和起始行号。

obj?语法是imacropy.doc(obj)的缩写,而obj??imacropy.sourcecode(obj)的缩写。

请注意,与IPython一样,由于某种原因,help(some_macro)只能看到WrappedMacro的通用文档字符串,而不是实际宏占位符对象的文档字符串。因此,请使用与IPython中相同的?语法来查看宏文档字符串。

自v0.3.1版新增。 文本命令macros?现在会打印当前导入到REPL会话中的宏的可读列表(如果有的话,则表示没有导入宏)。这会覆盖MacroPy特殊对象macrosobj?文档字符串查找语法,但可能不是必需的。仍然可以使用imacropy.doc(macros)手动调用。

引导程序

引导程序导入指定的文件或模块,并假装其__name__"__main__"。这允许您的主程序使用宏。

例如,some_program.py

from simplelet import macros, let

def main():
    x = let((y, 21))[2*y]
    assert x == 42
    print("All OK")

if __name__ == "__main__":
    main()

启动方式

macropy3 some_program.py

相对路径是可以的,只要它在当前目录下。不支持包含..的相对路径。我们还支持-m module_name变体

macropy3 -m some_program

当前目录下的点分隔模块路径是可以的。

如果您需要设置其他Python命令行选项

python3 <your options here> $(which macropy3) -m some_program

这样,其余的选项将传递给Python解释器本身,而-m some_program将传递给macropy3引导程序。

安装

从PyPI

作为用户安装

pip install imacropy --user

作为管理员安装

sudo pip install imacropy

从GitHub

作为用户安装

git clone https://github.com/Technologicat/imacropy.git
cd imacropy
python setup.py install --user

作为管理员,将最后一条命令更改为

sudo python setup.py install

依赖项

MacroPy3.

许可证

BSD。版权所有 2019-2020 Juha Jeronen 和约维尔大学。

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

imacropy-0.3.1.tar.gz (14.5 kB 查看哈希值)

上传时间

构建分布

imacropy-0.3.1-py3-none-any.whl (16.0 kB 查看哈希值)

上传时间 Python 3

由以下机构支持