使用pyimagej
这个包来在python中使用Fiji的相关插件。
Install
我是在conda的虚拟环境里用pip3 install pyimagej
来安装的。但是运行的时候又如下报错:
jgo.jgo.ExecutableNotFound: mvn not found
直接把问题投喂谷歌 搜到了这个https://githubmemory.com/repo/imagej/pyimagej/issues/118
我还是第一次知道这个东西是有issues列表的。
那么按照提示我应该装上 Maven (mvn)
conda activate my_evn
conda install Maven
之后继续运行代码
import imagej
ij = imagej.init()
出现了报错
SystemError: java.lang.UnsupportedClassVersionError: org/jpype/classloader/DynamicClassLoader : Unsupported major.minor version 52.0
报错原因是版本类型的不匹配。可能的情况有2种:
1.编译java.class
文件的 JDK 和我们运行java.class
文件的 JDK 的版本不同而产生的。高版本的JDK编译的文件无法在被低版本的JDK上运行
2.在Maven
项目中,可能由于Maven 版本与不同的 java JDK 的版本之间产生的原因,例如,maven 3.31+
的版本只能运行在java JDK 1.7+
的版本上。
一些概念
JDK
是JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK),没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
JMV
是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JDK=JRE+开发工具;
JRE=JVM+类库。
软件开发人员需要JDK,如果只需要运行java文件,只需要安装JRE。
JavaSE
(Java Standard Edition,Java 标准版)用于开发和部署桌面、服务器以及嵌入设备和实时环境中的Java应用程序。Java SE包括用于开发Java Web服务的类库,同时,Java SE为Java EE和Java ME提供了基础。Java SE(Java Platform, Standard Edition,Java标准版)就是基于JDK和JRE,包含支持 Java Web 服务开发的类,并为 Java 企业级开发提供基础。
查看我的环境版本配置如下:
java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+8-b765.1)
OpenJDK 64-Bit Server VM (build 11.0.6+8-b765.1, mixed mode)
按理来说高等级的JDK(11)应该要兼容低等级的JDK(报错中的major version 52对应的是JDK=8)才对。但是我还是尝试将JDK的版本降低为8来尝试init()过程。
conda activate my_env #因为是修改虚拟环境的配置 首先激活环境
conda uninstall openjdk
conda install openjdk=8
这段跑完之后再跑.init()就不报错了。这种debug认真搞也就是1h的事情。但是我就是能拖个大半周?
虽然我还没明白为什么上级的jdk居然不兼容jdk=8
总之可以进一步的去使用pyimagej
了