在python中使用imageJ


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

參考資料:
Python + imageJ 解決方案,采坑記錄
pypi-pyimageJ

之后繼續運行代碼

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

參考資料:
出現 java.lang.UnsupportedClassVersionError 錯誤的原因及解決方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM