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并肩生活。在
^{pr2}$
  • 有关合并名称空间的一种方法,请参阅示例项目。
    • 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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像