JVM 未在 Spyder 5.4.1 中使用 PyImageJ 运行

问题描述 投票:0回答:1

我正在构建一个软件并尝试在 Spyder 5.4.1 (Python 3.8) 和 ImageJ 宏之间组合我的分析脚本。我的数据集是一系列 .tif 堆栈图像,因此我决定使用 PyImageJ 访问 ImageJ2 网关接口,通过 Spyder 加载和运行我的 ImageJ 宏,以便在一个自动化脚本中执行分析。

我使用此处描述的通过 conda/mamba 的安装方法 https://pyimagej.readthedocs.io/en/latest/Install.html 以及来自 Anaconda Navigator 2.3.2 的 Powershell 提示

为创建的 pyimagej 环境调用

conda list
时,它显示正确安装了必要的包。我将环境更改为从 conda/mamba 安装生成的环境,称为“pyimagej”并从 Anaconda Navigator 打开 Spyder。

我可以毫无问题地导入和连接到 ImageJ2 网关。

  "Connect to the ImageJ2 API"
    import imagej
    ij = imagej.init()
    dataset = ij.io().open('/Desktop/Test/Test-1.tif')

但是,在尝试导入图像时出现以下错误。

Exception in comms call get_namespace_view:
      File "\Anaconda3\envs\pyimagej\lib\site-packages\spyder_kernels\comms\commbase.py", line 317, in _comm_message
        buffer = cloudpickle.loads(msg['buffers'][0],
    jpype._core.JVMNotRunning: Java Virtual Machine is not running
    
    Exception in comms call get_var_properties:
      File "\Anaconda3\envs\pyimagej\lib\site-packages\spyder_kernels\comms\commbase.py", line 317, in _comm_message
        buffer = cloudpickle.loads(msg['buffers'][0],
    jpype._core.JVMNotRunning: Java Virtual Machine is not running

使用以下代码初始化 ImageJ2 网关后尝试启动新的 JVM

ij = imagej.init()
告诉我 JVM 已经在运行。

"Start JVM"
import jpype
import jpype.imports
jpype.startJVM()
Traceback (most recent call last):

  Cell In[7], line 4
    jpype.startJVM()

  File ~\Anaconda3\envs\pyimagej\lib\site-packages\jpype\_core.py:166 in startJVM
    raise OSError('JVM is already started')

OSError: JVM is already started

为什么在使用

imagej.init()
启动 JVM 时出现错误,指出 JVM 未运行?由于这个错误,我无法对 PyImageJ 做任何事情。

python anaconda jvm spyder pyimagej
1个回答
0
投票

现在这是 Spyder >5.4.1 中报告的已知错误,并且与变量资源管理器的更新有关(请参阅Issue #20635)。已提出修复,目标是 Spyder 6 的发布。

当前的解决方法是通过更改代码将

data
变量定义为私有变量
_data = ij.io().open(/'Test.tif')
.

测试此解决方法后,它允许 PyImageJ 在 Spyder 中处理图像。

© www.soinside.com 2019 - 2024. All rights reserved.