我知道编辑这个网站吗?

Python

有方法可以将PythonImageJ ecosystem多种流程结合起来。它们在模型Python风格如何管理依赖关系方面有所不同——每个都解决不同的例子。

在斐济使用Python的方法

选项 流程模型 Python 风味 点包 笔记
Jython JVM 内 Python 2.7 语法 否 — Java 库 零生成开销;完整的 Java 互操作;作为 SciJava script 运行。
斐济 Python 模式 (PyImageJ) 单进程:Python ↔ JVM CPython 3 — 一个共享环境 是的 — 所有脚本共享一个环境 通过 --python 标志或 EditOptionsPython… 在 Python 模式下启动 Fiji 中构建;环境是使用 Appose 构建的。
Appose 产生的子进程 CPython 3 — 每个脚本环境 是的 — 每个脚本隔离 每个脚本都在自己的 Python 环境中运行,并具有自己的依赖项。可从 SciJava 脚本使用(Groovy 脚本可以启动 Appose Python 子进程)。直接构建在 Appose 上的 SciJava Python 语言类似位于scripting-appose-python
GraalPy(实验) JVM 内 CPython 3 — 部分兼容性 部分 尚未与斐济进行审查。原则上,GraalVMGraalPy 我们将提供比 Jython 更广泛的 CPython 兼容性的 JVM 内 Python 3。如果您尝试过,请报告 Image.sc Forum

何时选择哪个

  • 需要费用和开销并且对 Python 2.7 语法满意? 使用Jython。脚本在 JVM 内部运行,因此对斐济的调用只是普通的 Java 方法调用——没有序列化,没有进程边界。问题是:没有pip包,没有numpy/scipy/scikit-image

  • 想要 CPython 3 和完整的 PyPI 生态系统,并且您将在一个 Python 会话中完成几件事?使用 斐济 Python 模式。斐济以 Python 作为语言启动,在您运行的所有脚本之间共享单一环境。最适合一次性支付前期的交易会话费用。

  • 具有脚本冲突或严重依赖,需要每个脚本的可重复性?使用 Appose。每个关系脚本都声明其环境,Appose 交互构建它,并且图像脚本在子进程中运行。数据通过命名的共享内存与 JVM 共享,因此网络上没有大型副本。

  • 您的主机是Python,您想从那里调用斐济 - 例如,从Jupyter笔记本,还是作为更大的Python管道的一部分?使用PyImageJ。这是与斐济Python模式相同的Python/JVM桥接器,但实际上:Python是主机,斐济是访客。

注意事项

  • Jython 仅是 Python 2.7 语法,需要本机代码的模块(numpyscipy、…)不可用。
  • PyImageJ / Fiji Python 模式 在所有脚本之间共享一个环境 - 相关冲突是您需要解决的问题。
  • Appose 为每个脚本支付子进程生成成本,并序列化任何跨越边界的非共享内存数据。
  • GraalPy 目前尚未经过验证可与斐济一起使用;这是我们希望可行的,但尚未有人证明的选项的占位符号。

进一步阅读

  • Jython Scripting — JVM 中的 Python 2.7,短暂的默认设置。
  • PyImageJ — 来自 Python 呼叫斐济。
  • Appose — Fiji Python 模式和每个脚本 Appose 使用的跨语言进程间桥梁。
  • Appose+Fiji Workshop — 使用 Appose 将 Python 图像调整为斐济脚本处理。
  • Scripting basics — 托管 Jython(以及原型 Appose-Python 语言)的 SciJava 脚本框架。

If you are new to Python or image analysis using Python and would like to learn about it, check out the tutorials and resources from the EPFL Center for Imaging - image analysis field guide