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
Python2.6 unter Debian nutzen
-
- 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.
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
Könntest du das vielleicht etwas genauer erklären?Hängt ab wie du Django deployen willst.
Grüße
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Was davon willst du denn nutzen: CGI, FastCGI, mod_wsgi, HTTP Proxying?orschiro hat geschrieben:Könntest du das vielleicht etwas genauer erklären?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Geplant ist eigentlich mod_wsgi in Verbindung mit Apache2, da es, so wie ich das gelesen habe, das Zukunftsicherste ist.
Grüße
Grüße
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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).orschiro hat geschrieben:Geplant ist eigentlich mod_wsgi in Verbindung mit Apache2, da es, so wie ich das gelesen habe, das Zukunftsicherste ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gut, also ich bin jetzt folgendermaßen vorgegangen:
Symlink erstellen zu Python2.6
Danach noch einen Symlink zu /usr/local/bin
Führe ich nun in einem Verzeichnis django-admin.py startproject projekt aus, erhalte ich folgende Fehlermeldung:
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?
Symlink erstellen zu Python2.6
Code: Alles auswählen
ln -s `pwd`/django-trunk/django /usr/lib/python2.6/dist-packages/django
Code: Alles auswählen
ln -s `pwd`/django-trunk/django/bin/django-admin.py /usr/local/bin
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
Eine Idee?
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.
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.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?
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.
Nein, das wären schon alle. Die alternative wäre natürlich ``python2.6 manage.py`` auszuführen, das geht natürlich auch.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.
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
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:
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?
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
Anders gesagt, ich kann mir das Abändern der manage.py sparen?
-
- 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:
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
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: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.
In dem ich also einen Symlink von python2.6 auf python setze richtig?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.
Aber dann würden, wie bereits erwähnt, alle Programm python2.6 einsetzen und nicht mehr 2.5.
Grüße
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du verstehst das Konzept der Shebang nicht: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.
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'
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.
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.orschiro hat geschrieben:In dem ich also einen Symlink von python2.6 auf python setze richtig?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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?
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?
-
- 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
Damit wäre das Thema erledigt - danke.