实质性和有影响力的开源创新是 Anaconda 努力提供用于更快开发和部署安全 Python 解决方案的工具的核心。为了捕捉和传达我们团队对各种开源项目的持续贡献,我们现在将在我们的博客上定期发布相关新闻摘要。
与往常一样,Anaconda 的开源软件 (OSS) 团队在过去几个月里一直非常活跃!在这个我们新的季度 OSS 综述的第一期中,我将重点介绍我们一些最大的开源贡献以及一些更小但仍然非常有趣的努力。我还将谈及未来几个月的计划。
注意:请参阅最近的 PyScript 文章以获取有关该特定项目的更新,因为它们将不再在此处介绍。
按开发团队划分的重要内容
Anaconda 有许多不同的团队从事开源工作,每个团队都执行各种任务。在下面,我将介绍我们的一些核心工作和最近的里程碑。请注意,分为要点只是为了便于阅读;在实践中,我们许多人都在这些部门之间工作。
Dask 和数据访问
-
Awkward Array 项目为不适合普通数组或表格的数据提供向量化(快速!)数据处理 - 嵌套和可变长度、“类似 JSON”的数据 - 所有这些都使用熟悉的 NumPy 语法。由于这完全针对大数据,因此有必要在集群上并行和分布式地进行此处理。Dask-awkward 就是这样做的,并将与这篇文章和 Awkward 本身的 V2 几乎同时发布。该库将完整的 Awkward API 带到大规模分布式数据中,并已准备好供一般使用。
-
从同一项工作中,我们创建了 awkward-pandas,其中你混合了嵌套的可变长度数据和普通的扁平列。我们用自己的新扩展类型和方便的方法将 Awkward 的强大功能和速度引入 pandas API,用于在 Python/pandas 本地类型之间转换。这包括与 JSON 和 Parquet 加载/写入机制的集成。这作为 alpha 版本在 PyData Global 发布,对 dask-awkward-pandas 的工作正在进行中。
-
用于数据访问和编目的 Intake 库已经成熟稳定。最近,我们投入了新的努力来振兴和推动该项目发展。特别值得注意的是,Intake 图形用户界面 (GUI) 很快将提供新的功能 - 与 hvPlot 的资源管理器集成,以及在动态编辑和构建数据源、绘图和目录文件时更强的交互性。
-
fastparquet 可能主要处于维护阶段,但我们确实一直在改进它。2022.11.0 带来了可空类型的速度、模式演变和就地元数据更新。
-
在与 python-graphblas 进行了广泛的合作之后,该合作将优化的图形处理带到了 Python,我们专注于完善该库并为社区提供大量文档。
Jupyter
-
虽然一些用户尚未迁移到 JupyterLab(或即将推出的 Notebook V7),但 Anaconda 已经介入以恢复对“经典”Jupyter Notebook 代码库的维护。这使得 Jupyter Notebook 6.x 能够发布多个新的安全性和错误修复版本。
-
请参阅 这篇博客文章,了解 Jupyter 6.5 的发布,它作为向 Notebook V7 过渡的过渡点,但包含许多更新和稳定性修复。
-
为了实现对经典 Notebook 的长期支持,前端代码已移至 nbclassic 软件包中,该软件包可以与 JupyterLab 和未来的 Notebook V7 在环境中共存。
-
该团队一直在与更广泛的 Jupyter 社区互动以了解他们的需求,并将关注 2023 年的文档和功能,以简化扩展和扩展作者向新的基于 JupyterLab 的系统的过渡。
-
最后,对于技术人员来说,一个有趣的事实是,我们将 nbclassic 中所有基于 Selenium 的测试转换为 Playwright,这是一个重大开发,但也显著提高了测试套件的可靠性。
HoloViz
-
Bokeh 3 是整个 HoloViz 堆栈所依赖的低级交互式图形库的主要版本。值得特别注意的是,布局系统已重写为重用更多现代浏览器原语,而不是在内部处理大小和放置,这应该可以更好地与页面/应用程序中的其他图形组件进行互操作。
- Bokeh 的更改允许(并且要求)在整个相关堆栈中进行工作,这导致了过去几周发布了以下版本
-
Panel 的交互式小部件集
-
HoloViews 的交互式绘图生成引擎
-
GeoViews 的地图和投影扩展
-
Datashader 的高性能服务器端数据点聚合器
-
Lumen 的交互式仪表板构建器
-
-
我特别想强调 Panel 0.14,它与 PyScript 完全集成,因此你可以运行交互式 Python 数据可视化应用程序而无需服务器,并提供资源管理器(与前面提到的 Intake GUI 结合使用相同),用于交互式地构建数据框数据的视图。
Conda
-
Conda 在今年变得更加开放和社区驱动。例如,请注意 增强建议 过程,以及与 mamba 的持续对话和协作。
-
Conda 从版本 22.x 开始迁移到日历版本控制和定期发布周期。
-
插件 现在受 conda 架构的支持,因此开发人员可以创建和提供新功能,而无需在主存储库中添加代码。
-
Conda 使用的主要工件已迁移到 V2 “.conda” 文件,并具有 大大提高的下载和解包速度。
BeeWare
-
BeeWare 是一个工具集合,用于编写可在移动、桌面和 Web 平台上以原生外观运行的 Python 应用程序。BeeWare 项目维护自己的 博客,其中包含每月更新、路线图和其他新闻。快速浏览一下就能清楚地看到最近有很多活动,特别是在 Briefcase 方面,即构建/部署系统。
-
Android 和 iOS 的二进制软件包已发布,因此你现在可以在移动 Python 应用程序中包含 NumPy 和 Matplotlib 等流行库。
-
对于 Python 3.11 的构建系统已在发布后立即准备好。
-
测试基础设施的完整重写目前正在进行中。Briefcase 现在能够在应用程序模拟器环境中运行测试套件,并且此功能正在用于为 Toga GUI 工具包实施一个全面的跨平台测试套件。
Numba
-
Numba 是一个用于 Python 代码的即时 (JIT) 编译器,针对在 CPU 和 GPU 后端上运行数值算法进行了优化。本季度进行了大量工作来支持 Python 3.11 并升级到 LLVM 14。这些任务正在进行中,但应该很快会在开发分支中落地。
-
为了在 2023 年大力推动 Numba 模块化,以便在需要编译器组件的其他项目中更轻松地重用,我们一直在推进一些概念验证工作。在未来一年,我们将看到这些组件被整合到 Numba 中,或者可能被整合到新的项目中。
-
Numba 团队一直在对字节码分析前端进行重大重写,以便更好地处理每次 Python 次要版本发布时快速变化的字节码。这项工作将帮助我们更快地发布 Numba 更新以适应新的 Python 版本,并在未来实现其他编译器增强功能。预计这项工作将在 2023 年第一季度完成并发布到 Numba 中。
-
我们还一直在努力改进 Numba 扩展 API 的内部使用,这使得计算统一设备架构 (CUDA) 目标的改进得以实现,既增加了功能,又减少了代码大小。这项工作还将在未来实现更一致的数学行为。
其他
spatialpandas 到 Awkward
spatialpandas 是一个用于处理几何对象的库,它将几何对象作为 pandas 数据帧的一列,并包含其他普通列以及用于聚合和可视化的视图。在针对 Dask 和 pandas 开发 awkward-array 之后,我们意识到 spatialpandas 可以利用这些工具。特别是,多边形和线可以表示为点的变长数组,每个点由两个或多个数字组成。这正是 Awkward 处理的数据结构类型。初步实验表明,我们可以用 Awkward(通过 awkward-pandas)中经过良好测试的现代代码替换 spatialpandas 中大量复杂的 ad-hoc 遗留代码,并从更改中获得不错的速度提升。这是一个非常好的例子,说明了我们如何利用自己正在开发的工具来满足各种用例。我们将在未来几个月进一步开发这项功能。敬请关注!
Kerchunk
Kerchunk 是一个用于从许多其他数据集(支持多种格式)创建虚拟数据集的库,它可以在不复制或重新格式化原始文件的情况下提供云原生数据访问的优势。它已经存在一段时间了,但在本季度重新引起了人们的关注,因此我们能够提供更多功能,例如
-
将目标文件中的多个附近读取合并到一起,以减少调用次数
-
使用 Dask 使用树形缩减方案扫描文件
-
用于 geotiff 的坐标创建工具
-
在目标文件未压缩时自动提取较小的块
随着这项新工作的推进,预计在未来六个月内,我们将看到更多关于该项目的新闻。
下个季度见!
关于作者
Martin Durant 是一位前天体物理学家,拥有多年的科学研究经验。他还从事医学成像工作,构建 AI/ML 管道和研究平台。在广告科技领域短暂担任数据科学家后,Martin 加入 Anaconda,专注于 PyData 教育。他现在领导着多个开源 PyData 项目,重点关注数据访问、格式和并行处理。