Apache auf MacOS: findet 3.6 nicht

Probleme bei der Installation?
hebr3
User
Beiträge: 5
Registriert: Freitag 30. Juni 2017, 06:31

Apache auf MacOS: findet 3.6 nicht

Beitragvon hebr3 » Freitag 30. Juni 2017, 07:46

Hallo,
ich bin vor einigen Wochen mit Python angefangen, auf 2.7 (nutze Windows, macOS, beides mit xampp), nutze Visual Studio Code als Editor.

Jetzt möchte ich auf 3.x wechseln, klappt auch auf Windows (dort habe ich wohl den richtigen shebang gefunden)

Auf dem Mac kriege ich es nicht hin, ein 3.6 py-Programm auf dem Apache auszuführen
Ich habe 3.6 installiert, im Visual Studio Code kann ich auch debuggen mit pythonpath=/Library/Frameworks/Python.framework/Versions/3.6 im launch.json

In der Konsole gibt "which python3" das Ergebnis "/Library/Frameworks/Python.framework/Versions/3.6/bin/python3"

Jetzt habe ich alle möglichen shebangs (z.B. #!/Library/Frameworks/Python.framework/Versions/3.6) ausprobiert, um das Ergebnis auch auf dem Apache Webserver auszuführen. Das bekomme ich aber einfach nicht hin.

Hat irgendwer eine Idee, was das fehlende Element ist?

Vielen Dank im Voraus,
Heinz
Benutzeravatar
__deets__
User
Beiträge: 1323
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon __deets__ » Freitag 30. Juni 2017, 07:50

Der shebang muss auf ein executable zeigen. Also enden mit bin/python
hebr3
User
Beiträge: 5
Registriert: Freitag 30. Juni 2017, 06:31

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon hebr3 » Freitag 30. Juni 2017, 07:51

wenn ich
#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python
nehme, funktioniert es auch nicht.

Kann aber mit /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 Python über die Konsole starten, scheint also irgendwie richtig zu sein...
Benutzeravatar
__deets__
User
Beiträge: 1323
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon __deets__ » Freitag 30. Juni 2017, 07:59

Das shebang muss ein Pfad zu einem executable sein. Ob der absolut oder relativ sein kann hängt vom PATH ab, aber deiner Ist ja absolut. Das sollte auch im Apache klapppen. Wenn nicht, kann das ja auch noch andere Ursachen haben. Dazu hat der Logfiles. Was steh da drin?
hebr3
User
Beiträge: 5
Registriert: Freitag 30. Juni 2017, 06:31

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon hebr3 » Freitag 30. Juni 2017, 08:14

im error_log steht
[Fri Jun 30 09:02:31.094543 2017] [cgi:error] [pid 93194] [client ::1:61206] AH01215: (2)No such file or directory: exec of '/Applications/XAMPP/xamppfiles/htdocs/hebr3/work/test3.py' failed: /Applications/XAMPP/xamppfiles/htdocs/hebr3/work/test3.py
[Fri Jun 30 09:02:31.095138 2017] [cgi:error] [pid 93194] [client ::1:61206] End of script output before headers: test3.py

Aber: test3.py hat die Rechte "-rwxr-xr-x 1 Heinz admin 254 30 Jun 08:51 test3.py", sollte also ok sein (die gleichen Rechte wie ein 2.7-File


test3.py that diesen Code:

Code: Alles auswählen

#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python
# -*- coding: UTF-8 -*-

print ("Access-Control-Allow-Origin: *")
print( "Content-Type: text/plain; charset=utf-8\n")

import sys
print(sys.version)

Läuft im Debugging und auch auf einem 1&1 Webserver (wenn ich den shebang entsprechend austausche)

Apache gibt im Browser diese Meldungen:
Serverfehler!

Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

Fehlermeldung:
End of script output before headers: test3.py

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

Error 500

localhost
Apache/2.4.23 (Unix) OpenSSL/1.0.2j PHP/5.6.28 mod_perl/2.0.8-dev Perl/v5.16.3
Benutzeravatar
snafu
User
Beiträge: 5274
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon snafu » Freitag 30. Juni 2017, 08:46

Wenn dein Shebang auf python endet, das Executable jedoch python3 heißt, dann schreib doch einfach mal die 3 mit dazu...
shcol (Repo | Doc | PyPi)
Sirius3
User
Beiträge: 6549
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon Sirius3 » Freitag 30. Juni 2017, 09:26

@hebr3: der Fehler im Log hat doch nichts damit zu tun, dass Python nicht gestartet werden kann. Das Skript test3.py läuft durch, die Rückgabe des Skripts entspricht aber nicht dem, was Apache erwartet, nämlich eine gültige HTTP-Antwort, wie sie als Beispiel z.B bei Wikipedia zu finden ist. Es fehlt die Status-Zeile und der Header wird nicht abgeschlossen. Damit kann Apache nichts anfangen und bricht deshalb mit einer Fehlermeldung ab.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon Melewo » Freitag 30. Juni 2017, 12:41

Diese Fehlermeldung "End of script output before headers" hatte ich anfänglich ziemlich häufig, gleich ob da bei print die Klammern fehlten oder anderes. Möglich dass da statt "\n" eher ein "\n\n" bei der letzten Headerzeile gefragt ist oder anderes, könnte ich mir zumindest vorstellen.
Benutzeravatar
noisefloor
User
Beiträge: 1947
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon noisefloor » Freitag 30. Juni 2017, 13:47

Hallo,

@hebr3: warum quälst du dich eigentlich damit, ein Python-Skript via CGI auszuführen und nutzt nicht WSGI und ein entsprechendes Framework? Mal abgesehen davon, dass WSGI der de-facto Standard für Python Webanwendungen ist, ist der Weg auch deutlich einfacher.

Gruß, noisefloor
hebr3
User
Beiträge: 5
Registriert: Freitag 30. Juni 2017, 06:31

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon hebr3 » Freitag 30. Juni 2017, 14:54

Hallo liebe Helfer,
Danke, die Summe der Antworten hat mir geholfen:

@snafu: in der Tag hat die 3 einen Unterschied gemacht, danach bekam ich eine andere Meldung und konnte weiter forschen
@Sirius3: doch, hatte was damit zu tun: wenn ich ein 2.7 script nehme und dort im Pfad einen bewussten Fehler reinmache, bekomme ich die gleiche Antwort
@Melewo: Im 3.6 brauchte ich am Ende ein "\n", darauf bin ich dann mit deinem Tipp und der neuen Fehlermeldung gekommen - komischerweise lief es vorher auf einem 1&1 Server (3.4.2), scheint also irgendwie auch mit dem Setup zusammenzuhängen
@noisefloor: als Anfänger muss ich halt irgendwo anfangen. Da ich eine Anwendung baue, die ich auf einem 1&1 Server (ohne root-Rechte) laufen lassen will, bin ich diesen Weg gegangen. Ich werde mir aber auf jeden Fall demnächst mal WSGI anschauen, ich da nix installieren muss auf dem 1&1 Server, kann ich auch umstellen...

Vielen Dank an Euch alle!
Gruß
Heinz

so läuft es jetzt
  1. #!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
  2. # -*- coding: UTF-8 -*-
  3.  
  4. print( "Content-Type: text/plain; charset=utf-8\n")
  5.  
  6. import sys
  7. print(sys.version)
Zuletzt geändert von Anonymous am Freitag 30. Juni 2017, 15:25, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 1947
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon noisefloor » Freitag 30. Juni 2017, 19:45

Hallo,

Im 3.6 brauchte ich am Ende ein "\n", darauf bin ich dann mit deinem Tipp und der neuen Fehlermeldung gekommen - komischerweise lief es vorher auf einem 1&1 Server (3.4.2), scheint also irgendwie auch mit dem Setup zusammenzuhängen

Eher nicht. Die `\n` nach dem Header sind essentiell wichtig in CGI-Skripten, damit das läuft. Das ist völlig unabhängig von der Python-Version.

Was ist das denn für ein Server? Oder hast du "nur" Webspace bei 1&1? Bottle, ein recht populäres Python Micro-Webframework kann man auch via CGI laufen lassen.

Gruß, noisefloor
BlackJack

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon BlackJack » Freitag 30. Juni 2017, 21:14

Mal als Beispiel das ganze mit `bottle`:
  1. import sys
  2. from bottle import route, run
  3.  
  4.  
  5. @route('/')
  6. def index():
  7.     return sys.version
  8.  
  9.  
  10. if __name__ == '__main__':
  11.     run(server='wsgiref', host='127.0.0.1', port=8080, reloader=True)

Das startet beim Start einen eigenen kleinen HTTP-Server der auf dem lokalen Rechner auf Port 8080 auf Verbindungen wartet. Wenn man beim `run()`-Aufruf statt 'wsgiref' den Wert 'cgi' übergibt, dann verhält sich das Programm wie ein CGI-Skript.

Edit: Besser wäre natürlich wenn der Webserver auf dem 1&1-Server WSGI könnte.
hebr3
User
Beiträge: 5
Registriert: Freitag 30. Juni 2017, 06:31

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon hebr3 » Montag 3. Juli 2017, 08:18

ich habe leider nur ein Vertrag "Hosting Basic", d.h. keine Root-Rechte und kann keine weiteren Module selber installieren
--> bottle und weiteres steht mir nicht zur Verfügung

Nochmal vielen Dank an alle, ich kann jetzt auf Windows/macOS lokal entwickeln und dann nach 1&1 deployen (muss halt die sheban-Zeile austauschen)
BlackJack

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon BlackJack » Montag 3. Juli 2017, 09:13

@hebr3: Doch, bottle.py steht zur Verfügung: Das ist *eine* Python-Datei, die Du einfach in den Ordner kopieren kannst wo das Modul liegt das ausgeführt wird.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Re: Apache auf MacOS: findet 3.6 nicht

Beitragvon Melewo » Montag 3. Juli 2017, 10:52

Nur zum Testen hatte ich aus einem Buch oder aus dem Web noch ein anderes Beispiel. Nach jedem Windows-Update muss ich zuvor den WWW-Publishingdienst beenden, um Port 80 benutzen zu können, doch wenn ich den dann über IDLE starte, lässt sich eine Testseite ohne Angabe eines Ports normal im Browser mit "http://localhost/cgi-bin/test.py" aufrufen. Ein cgi-bin mit Testseiten liegt im selben Verzeichnis. Benutzte es bisher nur selten und nur für kleine Tests. Wie sich das nun unter Mac OS verhält, weiß ich jedoch nicht.

  1. from http.server import CGIHTTPRequestHandler, HTTPServer
  2.  
  3. handler = CGIHTTPRequestHandler
  4.  
  5. with HTTPServer(("", 80), handler) as httpd:
  6.     print("Server laeuft!")
  7.     httpd.serve_forever()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder