Module auf einem Server ohne ssh installieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
anonym110

Hallo,

ich habe ein einfaches Webhosting Paket. Es unterstützt leider kein SSH. Nun würde ich gerne eine flask Anwendung darauf laufen lassen. Zum testen habe ich mir in einer VirtualBox einen Demoserver installiert (apache2).

Der cgi-bin folder sieht so aus:

Code: Alles auswählen

.
├── index.py
└── site-packages
    ├── click
    ├── Click-7.0.dist-info
    ├── flask
    ├── Flask-1.0.3.dist-info
    ├── itsdangerous
    ├── itsdangerous-1.1.0.dist-info
    ├── jinja2
    ├── Jinja2-2.10.1.dist-info
    ├── markupsafe
    ├── MarkupSafe-1.1.1.dist-info
    ├── pip
    ├── pip-19.1.1.dist-info
    ├── pkg_resources
    ├── setuptools
    ├── setuptools-41.0.1.dist-info
    ├── werkzeug
    ├── Werkzeug-0.15.4.dist-info
    ├── wheel
    └── wheel-0.33.4.dist-info
Und die index.py Datei so:

Code: Alles auswählen

#!/usr/bin/python

import os
import sys
import logging

sys.path.insert(0, os.getcwd() + "/site-packages")

logging.error(sys.path)
logging.error(sys.version)
logging.error(sys.prefix)

from wsgiref.handlers import CGIHandler

from flask import Flask

app = Flask(__name__)


@app.route("/")
@app.route("/index")
def index():
    return "Hello, World!"

CGIHandler().run(app)
Wenn ich jetzt die Webseite aufrufe, erhalte ich einen "Internal Server Error". Im error log steht:

Code: Alles auswählen

ERROR:root:['/usr/lib/cgi-bin/site-packages', '/usr/lib/cgi-bin', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-i386-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0']
ERROR:root:2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516]
ERROR:root:/usr
Traceback (most recent call last):
  File "/usr/lib/cgi-bin/index.py", line 15, in <module>
    from flask import Flask
ImportError: No module named flask
[Wed May 29 13:06:25.697818 2019] [cgid:error] [pid 3899:tid 3029318464] [client 127.0.0.1:42736] End of script output before headers: index.py
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es ist riskant sich auf getcwd zu verlassen. Weißt du, wohin das zeigt? Es hat jedenfalls nicht implizit etwas mit der Python Datei die du ausführst zu tun.

Was aber damit zu tun hat ist die Variable __file__, die zeigt auf index.py, und daran kannst du dich lang hangeln.
anonym110

Das habe ich mir eigentlich angeguckt gehabt. Habe es auch ausprobiert indem ich den Pfad einfach direkt eingegeben habe.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hm. Interessant. Hab auch jetzt erst den Pfad gesehen (auf dem iPhone unterwegs, da liest es sich schlechter).

Ich würde es trotzdem nicht per cwd machen, aber natürlich muss das Ergebnis erstmal stimmen.

Hast du mal eigene Module hingelegt & probiert? Ist die unter Verzeichnis Struktur von flask etc vernünftig.
anonym110

Also ich habe ein ganz einfaches test module erstellt, was nur eine __init__.py enthält. Dieses funktioniert.

Zudem habe ich ausprobiert, das Skript ganz normal per python zu starten:

Code: Alles auswählen

python index.py
Dies hat soweit funktioniert:

Code: Alles auswählen

ERROR:root:['/usr/lib/cgi-bin/site-packages', '/usr/lib/cgi-bin', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-i386-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0']
ERROR:root:2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516]
ERROR:root:/usr
hi
Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2328, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2306, in wsgi_app
    ctx = self.request_context(environ)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2223, in request_context
    return RequestContext(self, environ)
  File "/usr/lib/cgi-bin/site-packages/flask/ctx.py", line 284, in __init__
    self.url_adapter = app.create_url_adapter(self.request)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2040, in create_url_adapter
    subdomain=subdomain)
  File "/usr/lib/cgi-bin/site-packages/werkzeug/routing.py", line 1489, in bind_to_environ
    wsgi_server_name = get_host(environ).lower()
  File "/usr/lib/cgi-bin/site-packages/werkzeug/wsgi.py", line 169, in get_host
    rv = environ["SERVER_NAME"]
KeyError: 'SERVER_NAME'
Status: 500 Internal Server Error
Content-Type: text/plain
Content-Length: 59

A server error occurred.  Please contact the administrator.root@testwebserver:/urorroot@terrorrorrrr
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Es sieht komisch aus, dass Du in `/usr/` irgendwelche Dateien ablegen kannst. Als normaler Nutzer darf man das normalerweise nicht.

Wie hast Du denn `python index.py` ausgeführt, wenn Du gar keinen SSH-Zugang hast?
Da aber sys.path gleich aussieht, sollten auch die gleichen Pakete gefunden werden.
anonym110

Wie ich Anfangs geschrieben habe, hab ich mir einen eigenen Apache Webserver in einer VirtualBox eingerichtet, um es dort testen zu können, da auf dem WebHosting noch nur python2.6 installiert ist, und ich warten muss bis sie mir das umstellen.
Benutzeravatar
__blackjack__
User
Beiträge: 14044
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jnnk: Um einen Hoster der immer noch Python 2.6 anbietet, würde ich einen grossen Bogen machen. Wenn das dann auch noch die aktuellste Version ist, die angeboten wird, ist panisch mit den Armen fuchteln und schreiend wegrennen angesagt…
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
anonym110

Würde ich auch gerne – habe da bloß leider keinen/nur geringen Einfluss. Bin am versuchen die Personen von einem besseren Anbieter zu überzeugen.
anonym110

Hat jmd. noch eine Idee wie das ursprüngliche Problem gelöst werden kann? Wäre halt auch interessant zu wissen, wenn man sich nach einem alternativen Hoster umschaut.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1236
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

In dem du deinen Webhoster hackst. Ist aber verboten.
Wechseln ist einfacher.

Da eine generelle Aussage zu treffen, ist nicht einfach, da es immer von Anbieter abhängt, was du alles machen kannst/darfst.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten