部署到線上的項目正常運行一年,今天早上突然報FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'錯誤。
JPype是一個能夠讓 python 代碼方便地調用 Java 代碼的工具,從而克服了 python 在某些領域(如服務器端編程)中的不足。
JPype的實際運行環境仍然是python runtime,只是在運行期間啟動了一個嵌入的jvm。
找不到jvm,大概原因是環境變量沒有生效。
平時在命令行中能直接運行java,是因為java所在的bin目錄被添加到PATH,且由export PATH后作為環境變量生效。但是JAVA_HOME只是作為普通變量,使用os.getenv()的時候獲取環境變量時找不到JAVA_HOME,所以推測應該只要將JAVA_HOME前面添加export,重啟項目即可。
解決辦法:
在全局配置文件/etc/profile或個人配置文件~/.bashrc或~/.bash_profile中添加export JAVA_HOME即可,如下是我的/etc/profile的設置:
# set java path export JAVA_HOME=/usr/local/java/latest export PATH=${JAVA_HOME}/bin:${PATH} export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 其他注意事項:如果使用PyCharm遠程調試,若遇到同樣報錯,需要在導入pyhanlp前先設置環境變量,如下 # 設置環境變量 import os os.environ['JAVA_HOME'] = '/usr/local/java/latest' # 再導入JPype 即可避免無法找到java的問題 import jpype
結束!