Python中ImageJ启动失败:CalledProcessError与Java版本问题
问题描述
此前可正常运行的代码:
import imagej ij = imagej.init()
重启电脑后执行报错:
CalledProcessError: Command '['C:\\path\\to\\java\\bin\\java.exe', '-version']' returned non-zero exit status 1.
完整堆栈追踪:
CalledProcessError Traceback (most recent call last) Input In [11], in <cell line: 3>() 1 import imagej ----> 3 ij = imagej.init() File ~\anaconda3\lib\site-packages\imagej\__init__.py:1496, in init(ij_dir_or_version_or_endpoint, mode, add_legacy, headless) 1493 raise EnvironmentError("Sorry, the interactive mode is not available on macOS.") 1495 if not sj.jvm_started(): -> 1496 success = _create_jvm(ij_dir_or_version_or_endpoint, mode, add_legacy) 1497 if not success: 1498 raise RuntimeError("Failed to create a JVM with the requested environment.") File ~\anaconda3\lib\site-packages\imagej\__init__.py:1603, in _create_jvm(ij_dir_or_version_or_endpoint, mode, add_legacy) 1601 sj.config.add_option("-Djava.awt.headless=true") 1602 try: -> 1603 if hasattr(sj, "jvm_version") and sj.jvm_version()[0] >= 9: 1604 # Disable illegal reflection access warnings. 1605 sj.config.add_option("--add-opens=java.base/java.lang=ALL-UNNAMED") 1606 sj.config.add_option("--add-opens=java.base/java.util=ALL-UNNAMED") File ~\anaconda3\lib\site-packages\scyjava\_java.py:140, in jvm_version() 137 if java is None: 138 raise RuntimeError(f"No java executable found inside: {p}") -> 140 version = subprocess.check_output( 141 [str(java), "-version"], stderr=subprocess.STDOUT 142 ).decode() 143 m = re.match('.*version "(([0-9]+\\.)+[0-9]+)', version) 144 if not m: File ~\anaconda3\lib\subprocess.py:424, in check_output(timeout, *popenargs, **kwargs) 421 empty = b'' 422 kwargs['input'] = empty -> 424 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, 425 **kwargs).stdout File ~\anaconda3\lib\subprocess.py:528, in run(input, capture_output, timeout, check, *popenargs, **kwargs) 526 retcode = process.poll() 527 if check and retcode: -> 528 raise CalledProcessError(retcode, process.args, 529 output=stdout, stderr=stderr) 530 return CompletedProcess(process.args, retcode, stdout, stderr) CalledProcessError: Command '['C:\\Users\\andre\\anaconda3\\Library\\bin\\bin\\java.exe', '-version']' returned non-zero exit status 1.
从报错路径C:\\Users\\andre\\anaconda3\\Library\\bin\\bin\\java.exe可以看出,自动检测的Java路径存在重复的bin目录,导致路径无效,无法执行java -version命令。
解决办法
验证并修复系统Java路径
- 打开命令提示符,输入
where java,找到有效的Java可执行文件路径(比如C:\Program Files\Java\jdk-xx.x.x\bin\java.exe,或者Anaconda正确路径C:\Users\andre\anaconda3\Library\bin\java.exe) - 检查环境变量:确保
JAVA_HOME指向JDK/JRE的根目录,PATH中包含Java的bin目录,且该路径在Anaconda相关路径之前(避免路径冲突)
- 打开命令提示符,输入
手动指定imagej的Java路径
绕过自动检测,直接在代码中指定正确的Java路径:import imagej import scyjava # 方式1:指定JDK/JRE根目录 scyjava.config.add_option('-Djava.home=C:\\Users\\andre\\anaconda3\\Library') # 方式2:直接指定java.exe路径 # scyjava.config.add_option('-Djvm.path=C:\\Users\\andre\\anaconda3\\Library\\bin\\java.exe') ij = imagej.init()修复Anaconda自带的Java环境
如果是Anaconda内置的Java出现路径错误,尝试重装相关包:conda uninstall openjdk -y conda install openjdk -y
内容的提问来源于stack exchange,提问作者Andres
相关产品推荐
相关产品推荐

