Python的无缝Nim扩展模块
nython的Python项目详细描述
尼龙管
为Nim库构建Python扩展模块。在
概要
这是使用Nim的compileToC命令生成C代码,然后Python可以将其打包为扩展模块,并在您的包安装到其他地方时进行本机编译。在
系统需求
安装
使用您最喜欢的Python包管理器,这个库位于pypi上
pip install nython
使用
请参阅使用nython(并运行所有测试)的工作项目的示例文件夹。在
诗歌
- 添加
nython
作为包依赖项 - 在
pyproject.toml
的[tool.poetry]
部分中,添加“build=”构建.py““ - 在项目的顶层创建文件
build.py
。这将在创建包时由poetry调用,本质上它只需要有一个build
函数,该函数接受setupkwargs的dict并添加到它。在 - 添加你的Nim模块,对它们进行nythonize,然后将它们传回
- 注意:你必须通过nimbase.h
- 注意:您的程序包中必须包含一个Nim程序包。它可以和你的python并肩生活。在
- 有关合并名称空间的一种方法,请参阅示例项目。
- tests目录显示了如何运行函数(没有什么特别的)
设置工具
Todo-但基本上只需将ext_modules = nythonize(nimbase, [{"name": "adder", "path": "ponim/adder.nim"}])
添加到设置调用中
致谢
- nimpy:这是一个很好的项目,它“工作正常”,使Nim和Python的工作变得容易。nython只是最后5%的包装工作。nimpy完成了95%的工作。在
- faster-than-requests,我仔细研究了这个包的构建系统是如何设置的。本质上,nython只是一个简化版的设置,用于比请求更快的速度。在
发展
目标
为Nim代码与Python集成创造一个无缝的开发体验。Nim应该非常容易使用,最终您只需要为Python编写Nim专用的模块,然后意识到实际上并不需要Python并迁移到Nim。这个软件包应该可以在一些地方和公司中启用Nim,在这些地方,Nim不能被选为项目的主要语言,但是在需要性能的时候可以使用它。这应该比Cython更容易使用。在
测试
目前,这是通过运行示例项目中的代码来测试的。我想找一个更好的方法来做这件事,所以如果你有一个好主意,随时可以贡献!在
目前:
cd example
poetry shell
poetry install
poetry run py_test
就这样。在
待办事项
- 有依赖性地支持灵活/全面的Nim项目
- 允许微调编译器选项
- 删除以项目根目录结尾的伪.so文件。在
- 在系统中找到并移除它
- 可能会用nimpy在本地virtualenv中创建Nim安装
- 生成一些性能测试,尽管这在nimpy上比这个包更重要
Ponim
如果您对此感兴趣,并且希望看到一种不错的本地开发方式,请查看我编写的这个示例:https://github.com/sstadick/ponim
- 项目
标签: