交互式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特殊对象macros
的obj?
文档字符串查找语法,但可能不是必需的。仍然可以使用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
依赖项
许可证
BSD。版权所有 2019-2020 Juha Jeronen 和约维尔大学。
项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
imacropy-0.3.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 09bafc1c6a29e7c2ddf4c88362fa9e7e79fdbdb59f8277d31ec8be0d4b89060e |
|
MD5 | ca6348fa1ad69650d9419085e234c156 |
|
BLAKE2b-256 | 260b1b77f48b46e77c4fe6b828eec8e520b3409549afef50ef45c61308b86756 |
imacropy-0.3.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a0caacf7e89042cac8dc93ce7adcc70292f49b5bcc8bba38133738cc045eac43 |
|
MD5 | 88f704a96ddc8dc6badf9c21a7c2a0d7 |
|
BLAKE2b-256 | 0b4d1434cb8307f83aced1e5bea07982c8bbfbd2d0f68ce174cffacade0cca3f |