Python2.6 unter Debian nutzen

Probleme bei der Installation?
Antworten
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Hallo Leute,

bisher habe ich mein Django-Projekt nur lokal genutzt und weiterentwickelt. Jetzt wird es allerdings Zeit, dieses auf meinen Webserver zu packen. Dieser läuft derzeit unter Debian Squeeze (Testing). Da ich lokal Python 2.6.2 einsetze, wollte ich dieses auch auf meinem Server nutzen.

Nur habe ich dort feststellen müssen, dass es Python2.6. lediglich in Experimental gibt.

Jetzt habe ich mir von dort python2.6 sowie python2.6-minimal heruntergeladen und lokal mittels dpkg -i <packet> installiert. Weiterhin installiert habe ich nach wie vor python 2.5.4. Sollte ich dieses runterschmeißen, oder kommen sich die beiden Versionen grundsätzlich sowieso nicht in die Quere?

Und wie sage ich Django, dass er auf meinem Server eben dieses python2.6 zurückgreifen soll?

Danke und Grüße :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hängt ab wie du Django deployen willst.

Achja, grundsätzlich kann man in Debian die Python-Pakete regulär nebeneinander installiert haben, das ist kein Problem.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Hängt ab wie du Django deployen willst.
Könntest du das vielleicht etwas genauer erklären? :oops:

Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

orschiro hat geschrieben:Könntest du das vielleicht etwas genauer erklären? :oops:
Was davon willst du denn nutzen: CGI, FastCGI, mod_wsgi, HTTP Proxying?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Geplant ist eigentlich mod_wsgi in Verbindung mit Apache2, da es, so wie ich das gelesen habe, das Zukunftsicherste ist.

Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

orschiro hat geschrieben:Geplant ist eigentlich mod_wsgi in Verbindung mit Apache2, da es, so wie ich das gelesen habe, das Zukunftsicherste ist.
Dann musst du mod_wsgi gegen Python 2.6 kompilieren. Oder FastCGI nutzen, da ist es trivial, da es nicht gegen die libpython gelinkt werden muss (da reicht es den/die Shebang anzupassen und auf Python 2.6 zu stellen).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Gut, also ich bin jetzt folgendermaßen vorgegangen:

Symlink erstellen zu Python2.6

Code: Alles auswählen

ln -s `pwd`/django-trunk/django /usr/lib/python2.6/dist-packages/django
Danach noch einen Symlink zu /usr/local/bin

Code: Alles auswählen

ln -s `pwd`/django-trunk/django/bin/django-admin.py /usr/local/bin
Führe ich nun in einem Verzeichnis django-admin.py startproject projekt aus, erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/local/bin/django-admin.py", line 2, in <module>
    from django.core import management
ImportError: No module named django.core
Starte ich hingegen python2.6 in der Konsole, kann ich django per import django problemlos importieren. Mittels python funktioniert das logischerweise nicht, da python2.5 Django auch nicht importieren soll.

Eine Idee?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du musst in der ersten Zeile von ``django-admin.py`` angeben dass python 2.6 benutzt werden soll.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Daran habe ich auch schon gedacht, allerdings müsste ich dies ja nach jedem Trunk Update wiederholen, da die Abänderung überschrieben werden würde oder?

Zumal zieht sich das ja durch das gesamte Projekt durch. Sprich ich müsste die manage.py entsprechend abändern und weitere Dateien sicherlich auch.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

orschiro hat geschrieben:Daran habe ich auch schon gedacht, allerdings müsste ich dies ja nach jedem Trunk Update wiederholen, da die Abänderung überschrieben werden würde oder?
Du kannst auch die Mercurial-Version verwenden und dort einen mq-Patch anlegen, denn du bei jedem Update einfach nochmal anwenden lässt. Andererseits ist ``django-admin.py`` eine so kurze Datei, dass da eh nie Änderungen anstehen und somit kann man die Datei auch "dirty" ewig mitziehen.
Django in Mercurial zu managen ist sowieso viel praktischer als via SVN, da ich so auch die Patches die nicht in Django aufgenommen worden sind sehr einfach verwalten kann und nach Lust und Laune applizieren und auch wieder entfernen kann.
orschiro hat geschrieben:Zumal zieht sich das ja durch das gesamte Projekt durch. Sprich ich müsste die manage.py entsprechend abändern und weitere Dateien sicherlich auch.
Nein, das wären schon alle. Die alternative wäre natürlich ``python2.6 manage.py`` auszuführen, das geht natürlich auch.

Persönlich habe ich in ``/usr/local/bin`` einen Symlink ``python`` auf ``/usr/bin/python2.6`` angelegt und die Angelegenheit so gelöst. Ist natürlich nicht für jedes Problem die richtige Lösung, für meine Bedürfnisse war es aber genau das richtige.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Vielen Dank für deine Tipps. Ich würde gerne mit der Variante "Ändere django-admin.py und manage.py ab" fahren, den Symlink finde ich persönlich nicht so praktisch, da dann sämtliche Programme python 2.6 verwenden würden. Ich weiß nicht wie sinnvoll das wäre, Python steckt bei Debian vielleicht nicht grundlos in experimental.

Also jedenfalls habe ich jetzt die beiden Dateien folgendermaßen abgeändert:

Code: Alles auswählen

Statt 
#!/usr/bin/env python
steht in beiden nun
#!/usr/bin/env python2.6
django-admin.py startproject projekt konnte ich nun auch problemlos ausführen. Führe ich allerdings den Befehl python manage,py runserver aus, nimmt er nach wie vor python2.5, obwohl ich in der manage.py selbst was anderes festgelegt habe. Sprich hier muss ich trotz der Dateiabänderung weiterhin python2.6 manage.py runserver benutzen?

Anders gesagt, ich kann mir das Abändern der manage.py sparen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Shebang wird nur ausgewertet wenn du das Skript als Executable ausführst. Also wenn du ``python manage.py`` ausführst, wird ``manage.py`` von dem Python ausgeführt, was sich auf deinem System unter ``python`` meldet. Genauso kannst du auch ``python2.2 manage.py`` oder ``python3.1 manage.py`` ausführen, vorrausgesetzt du hast diese Versionen installiert (das ist natürlich nur ein Beispiel, Django läuft weder mit 2.2 noch mit 3.1).

Du kannst dir das abändern beider Dateien sparen, wenn du die Dateien explizit mit einem Interpreter startest. Das habe ich dir aber auch schon gesagt.

Eine weitere Möglichkeit ist natürlich, den Symlink zu ``django-admin.py`` durch ein Skript zu wie dieses zu ersetzen:

Code: Alles auswählen

#/bin/bash
exec python2.6 /pfad/zu/django-admin.py $@
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Leonidas hat geschrieben:Shebang wird nur ausgewertet wenn du das Skript als Executable ausführst. Also wenn du ``python manage.py`` ausführst, wird ``manage.py`` von dem Python ausgeführt, was sich auf deinem System unter ``python`` meldet.
Gut, aber dann wird doch der Shebang überhaupt keine Beachtung geschenkt oder verstehe ich das falsch? Ich meine, selbst wenn ich das Script per python manage.py starte, muss er doch registrieren, dass er eigentlich python2.6 verwenden sollte, weil es eben in der Shebang steht.
Leonidas hat geschrieben: Du kannst dir das abändern beider Dateien sparen, wenn du die Dateien explizit mit einem Interpreter startest. Das habe ich dir aber auch schon gesagt.
In dem ich also einen Symlink von python2.6 auf python setze richtig?
Aber dann würden, wie bereits erwähnt, alle Programm python2.6 einsetzen und nicht mehr 2.5.

Grüße
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

orschiro hat geschrieben:Gut, aber dann wird doch der Shebang überhaupt keine Beachtung geschenkt oder verstehe ich das falsch? Ich meine, selbst wenn ich das Script per python manage.py starte, muss er doch registrieren, dass er eigentlich python2.6 verwenden sollte, weil es eben in der Shebang steht.
Du verstehst das Konzept der Shebang nicht:

Gehen wir von diesem Skript aus, nehmen wir an, es steht in ``~`` und ist executable (+x).

Code: Alles auswählen

#!/usr/bin/python
print 'Hallo'
Nun bin ich auch in ~ und möchte es ausführen: ``./hallo``. Dann schaut der Kernel ob es ausführbar ist und wenn ja, dann wertet er die erste Zeile aus: ``/usr/bin/python ~/hallo`` wird aufgerufen. Fein, funktioniert auch. Aber wenn ich nun ``ruby hallo' eintippe, dann wird sofort der Ruby-Interpreter gestartet und für den ist die erste Zeile einfach nur ein Kommentar und er führt den nicht kommentierten Code aus.

Heißt also: Shebang wird nur ausgewertet wenn du das Skript als Executable ausführst, wenn du es als Parameter dem Python-Interpreter mitgibst, dann ist es dem herzlich egal ob da etwas drin steht und was da drin steht. Für ihn ist es ein Kommentar.

Also: entweder mit dem richtigen Interpreter aufrufen, oder Shebang entsprechend setzen.
orschiro hat geschrieben:In dem ich also einen Symlink von python2.6 auf python setze richtig?
Nein, falsch. Indem du ``python2.6 /usr/local/bin/django-admin.py`` und ``python2.6 manage.py`` ausführst. Wie du siehst, übergebe ich in beiden Fällen die auszuführende Datei als Parameter und somit ist es dem Interpreter total egal was im Shebang steht, daher ist es egal ob da jetzt ``#!/usr/bin/env python`` oder ``#!/usr/bin/env python2.6`` drin steht. Aber _nur_ in diesem Fall. Wenn du ``django-admin.py`` und ``./manage.py`` ausführst, dann wird Shebang ausgewertet und muss dementsprechend auch stimmen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Und nochmals danke,

jetzt habe ich das verstanden. :)

Dann mache ich beide so wie du sagst ausführbar und gut ist.

Sicherheitsrelevante Aspekte ergeben sich dadurch wohl weniger oder?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nein, das Ausführbarkeits-Bit hat keine Sicherheitsimplikationen die du ohne das Bit nicht genauso hättest (die gäbe erst das Suid-Bit, aber das funktioniert auf Skripten sowieso nicht).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Damit wäre das Thema erledigt - danke. ;)
Antworten