JVM未在使用PyImageJ的Spyder 5.4.1中运行

8ehkhllq  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(208)

我正在构建一个软件,并尝试将Spyder 5.4.1(Python 3.8)和ImageJ宏之间的分析脚本结合起来。我的数据集是一系列.tif堆栈图像,因此我决定使用PyImageJ访问ImageJ 2网关接口,通过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。
我可以导入并连接到ImageJ 2网关,没有问题。

"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

在使用以下代码初始化ImageJ 2网关ij = imagej.init()之后尝试启动新的JVM,这告诉我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

为什么我会收到一个错误,指出JVM在使用imagej.init()启动时没有运行?由于这个错误,我无法使用PyImageJ做任何事情。

rqenqsqc

rqenqsqc1#

这是Spyder〉5.4.1中已报告的已知错误,与变量资源管理器的更新有关(参见Issue #20635)。已提出修复,目标是发布Spyder 6。
当前的解决方法是通过将代码更改为_data = ij.io().open(/'Test.tif'),将data变量定义为私有变量。
在测试了这个解决方案之后,PyImageJ可以在Spyder中很好地处理图像。

相关问题