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 Spring启动启用HTTPS   actionscript 3 java中的这个[“var”+“name”]   java只匹配给定集合中一个字符的一个匹配项   java Hibernate:防止角色表中出现多个相同的条目   javajersey+Spring注入servlet请求   java HtmlEditor javafx失去焦点   java Apache Wicket AjaxRequestTarget ListView组件未刷新或更新   mysql java。无法将lang.String转换为java。sql。时间戳   java将巨大的整数文件(在一行中)拆分为具有内存限制的已排序块   安卓如何完全关闭proguard?   安装Eclipse和Android SDK后的java“无AVD可用”消息   java动态显示图像视图   java在Spring中还有哪些WebsocketClient实现?   java Glassfish需要很长时间才能重新启动   使用Java简单串行连接器将pc与arduino连接   java如何在camel文件组件配置中结合readLockCheckInterval和maxMessagesPerPoll?   单击Android时的java预览图像   java如何将字节数组转换为ByteArrayOutputStream