Python w High Sierra „Brak środowiska wykonawczego Java, prośba o instalację”

1

Mam kod Pythona, który działa dobrze w wielu innych miejscach i „używany” do pracy na moim komputerze Mac, ale teraz, gdy próbuję uruchomić kod jako:

python <pythonfile>.py

Pojawia się komunikat o błędzie: No Java runtime present, requesting install.

Wypróbowałem wszystkie poprawki w SO i zainstalowałem najnowszą wersję JDK Java. Jedyne, czego nie zrobiłem, to zrestartowanie, ponieważ jestem w trakcie wielu rzeczy.

Jakieś pomysły?

Java JDK

java version "11.0.2" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+7-LTS, mixed mode)

Pyton

mbp-1056:site-packages$ python --version
Python 2.7.10
mbp-1056:site-packages$ type -p python
/usr/bin/python

Kod

import time
import json

from confluent_kafka import Producer
from hl7_to_dict import hl7_str_to_dict

#Set up my producer
p = Producer({'streams.producer.default.stream': '/demos/hl7demo/hl7stream'})

str_msg=''
with open("hl7_records_random.txt") as f:
    for line in f:
        if line!='\n':
            str_msg=str_msg+line
        else:
            #print(str_msg)
            d = hl7_str_to_dict(str_msg)
            print json.dumps(d)
            print ("\n\n")
            json_hl7 = json.dumps(d)

            p.produce('allMessages', json_hl7)
            p.produce('adt_topic', json_hl7)
            # Or - just do a json.dumps(your_json) instead of str_msg
            p.flush()
            str_msg=''
            time.sleep(5)
Chris C.
źródło
Może używa modułu, który potrzebuje Java 8, a może nawet 6 ??
user3052786,
1
Co z tym kodem Pythona, który wymaga Java?
BallpointBen
Co python --versionpokazuje itype -p python
Mark
@BallpointBen Chciałbym wiedzieć! Mogę tylko wymyślić, że mam instrukcję importu dla Kafki, from confluent_kafka import Producerponieważ to, co napisałem, jest producentem Kafki, ale nadal nie rozumiem łącza Java.
Chris C

Odpowiedzi:

1

Po wielu cierpieniach i niepokojach, oto co musisz zrobić:

Możesz postępować zgodnie z instrukcjami tutaj: Odpowiedź przepełnienia stosu

Możesz też postępować zgodnie z instrukcjami tutaj: Oliver Dowling Shoutout

Krótko mówiąc, musisz edytować /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Info.plist (lub równoważną ścieżkę jdk, tylko wersja będzie inna) i zmienić:

<key>JVMCapabilities</key>
<array>
    <string>CommandLine</string>
</array>

Do:

<key>JVMCapabilities</key>
<array>
    <string>CommandLine</string>
    <string>JNI</string>
    <string>BundledApp</string>
</array>

Następnie musisz dodać ten symboliczny link:

sudo mkdir -p /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bundle/Libraries


sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bundle/Libraries/libserver.dylib

Opublikuj komentarz, jeśli masz problemy!

Chris C.
źródło
To nie wydaje się właściwe (ani uzasadnione). Typowe żądanie tego monitu to coś, co wymaga 32-bitowej Java, co dla Pythona brzmi bardzo, bardzo dziwnie.
Thorbjørn Ravn Andersen