使用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
了