簡體   English   中英

Mac OS 10.14.6 上的 LiClipse 8.1 無法運行 python 解釋器(posix_spawn 失敗)

[英]LiClipse 8.1 on Mac OS 10.14.6 cannot run python interpreter (posix_spawn failed)

也許有人看過這個..

相當舊的 Mac OS 可能會導致這種情況,但大多數情況下一切正常:

  • Mac OS 10.14.6 (18G9323)
  • LiClipse 8.1.0.202110030926 com.brainwy.liclipse.rcp.product null
  • Homebrew 剛剛更新(盡管也抱怨操作系統太舊)並且重新安裝了一些軟件包以確保它全部被清除
$ pyenv versions
  system
  3.9.5
* 3.9.7 (set by /Users/aanisimov/.pyenv/version)

$ which python
/Users/aanisimov/.pyenv/shims/python

$ python --version
Python 3.9.7

LiClipse 只是找不到它,在那里嘗試了所有這些按鈕(PATH,pip:什么不是)仍然是同樣的錯誤:

Errors getting info on discovered interpreter(s).
See error log for details.
  
  java.lang.RuntimeException: java.io.IOException: Cannot run program "/usr/bin/python": error=0, posix_spawn failed
  
  java.lang.RuntimeException: java.io.IOException: Cannot run program "/usr/bin/python2.7": error=0, posix_spawn failed
  
  java.lang.RuntimeException: java.io.IOException: Cannot run program "/usr/local/bin/python3": error=0, posix_spawn failed
  
  java.lang.RuntimeException: java.io.IOException: Cannot run program "/usr/local/bin/python3.9": error=0, posix_spawn failed

看起來它正試圖在最明顯的位置找到它,但無法生成運行它的進程?

Python 通過終端和 Sublime Text 之類的東西可以正常工作。

感謝您的任何建議!

另請參閱隨附的屏幕截圖!

我遇到了非常類似的問題,除了在 macOS 12.4 Monterey 上運行的 LiClipse 版本 8.2.0,MacPorts 安裝了 Python 解釋器。 症狀相似,只是 LiClipse 返回錯誤代碼 316 而不是 0。我想知道:如何解決此問題,以便 LiClipse 可以在 PyDev 中添加新的解釋器條目,而不顯示錯誤?

我想出了一個解決方法。 我不完全理解它為什么起作用,但我有一些線索。

解決方法

  1. 安裝相同年份的標准 Eclipse 應用程序(Eclipse 2021-12,版本 4.22,對應於 LiClipse 8.2.0)。

  2. 退出 LiClipse。

  3. 使用純文本編輯器編輯 LiClipse.app 中的文件LiClipse.app/Contents/Eclipse/LiClipse.ini 更改該文件中的行:

     --launcher.defaultAction openFile -vmargs

    閱讀(當然用您的主目錄名稱替換<myuserid> ,並且在以“/Users/”開頭的很長的行中沒有換行符......):

     --launcher.defaultAction openFile --launcher.appendVmargs -vm /Users/<myuserid>/.p2/pool/plugins/org.eclipse.justj.openjdk.hotspot.jre.full.macosx.x86_64_18.0.1.v20220515-1614/jre/lib/libjli.dylib -vmargs
  4. 保存 LiClipse.ini。

  5. 運行 LiClipse.app。 它現在應該能夠在 PyDev 中添加新的解釋器條目,並且沒有錯誤。

  6. 刪除 Eclipse.app。 (這應該讓 /Users//.p2/ 不受干擾。)

它的作用

我不是 LiClipse 或 Eclipse 內部的專家。 我認為正在發生的是 Eclipse 為應用程序運行提供了一個 OpenJDK,它與 LiClipse 提供的 OpenJDK 不同,它更好地支持最新版本的 macOS。 差異的證據:

% /Applications/LiClipse.app/jre/Contents/Home/bin/java --version
openjdk 14.0.2 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.2+12)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.2+12, mixed mode, sharing)

% /Users/<myuserid>/.p2/pool/plugins/org.eclipse.justj.openjdk.hotspot.jre.full.macosx.x86_64_18.0.1.v20220515-1614/jre/bin/java --version
openjdk 18.0.1 2022-04-19
OpenJDK Runtime Environment Temurin-18.0.1+10 (build 18.0.1+10)
OpenJDK 64-Bit Server VM Temurin-18.0.1+10 (build 18.0.1+10, mixed mode)

LiClipse.ini文件控制應用程序的啟動方式。 macOS 運行一個啟動器程序,啟動器由 ini 文件的內容引導。 插入的行在我看來就像他們告訴啟動器指定不同的 Java VM 在運行主 Eclipse/LiClipse 應用程序時使用 - 使用由 Eclipse 提供的 OpenJDK 18.0.1,而不是保存在~/.p2/中LiClipse 提供的 OpenJDK 14.0.2; 並調用庫libjli.dylib

關於原因的線索

我對 JDK 知之甚少,不知道libjli.dylib庫是做什么的。 StackOverflow 答案中有線索, Java libjli 庫是干什么用的? ,並在博客文章中,從 C 調用 Java 看起來它有助於 Java VM 環境和主機的本地語言環境之間的交互。 StackOverflow 的回復提到,

libjli.so 包含一個啟動器接口,用於准備在命令行中傳遞的 arguments 並使用它們啟動虛擬機。...

在我的案例中,錯誤消息為,

java.io.IOException:無法運行程序“/opt/local/Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python”:錯誤=316,posix_spawn

我推測 LiClipse 試圖調用 macOS 運行 Python 解釋器,但這次嘗試失敗了,因為 Java VM 環境無法成功調用主機的原生環境。

對 LiClipse.ini 的更改意味着 LiClipse 使用不同的 OpenJDK,並以不同的方式調用 libjli。 這些差異的結合似乎讓Java VM環境成功調用了宿主機的原生環境。

我推測正確的修復需要更新 LiClipse。 我已經打開票239,8.2.0 無法運行 python 和點子,“java.io.IOException:無法運行程序”... error=316, posix_spawn failed ,來跟蹤它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM