python 2 vagy 3, virtualenv, apache2

Sziasztok!

Vagrant virtualbox (ubuntu 12.04) alá próbálok pythont és django-t tenni. A dolog sikeres is abban az esetben ha a gyári 2.7-es pythont használom. Tökéletesen működik, megy az apache, mysql, saját webszerver, pip-pel a django, minden ok.

Viszont:
Keresgélés után sem jöttem rá, hogy tudom a bulit-in 2.7-est a legfrissebb 2-esre cserélni.
Forrásból kellene fordítani, valamilyen ppa-t használni?

Ha a 2.7-es mellé telepítem a 3-ast, akkor virtualenv-el tudok váltogatni, de apache-al (mod_wsgi) csak a 2-es megy.
Ha a mod-wsgi-t cserélem le a 3.3-ashoz valóra (libapache2-mod-wsgi-py3), akkor a 2-est nem tudom tovább használni.

Php-hez a phpbrew-t használom, hogy tudjak verziókat váltogatni. Találtam pythonbrew-t, de nem hiszem, hogy megoldja az apache2 mod_wsgi problémáját.

Kezdőként a 2-es vagy a 3-as használatát javasoljátok?
Van értelme több verziót kipróbálni/használni?

Hogy érdemes csinálni? Használjam fejlesztéshez a beépített webszervert?
Külön vm kell verziónként ha apach alatt megy, vagy korrekt megoldás a wsgi modulok egymás mellett használatára (az lenne az igazi, ha projektenként külön tudnám állítani a python verziót)?
Mi a helyzet mysql driverrel? 2-es alatt megy, de a 3-asról azt olvastam nem túl friss postokban, hogy nem megoldott 100%-ig a dolog.

Egyenlőre az egész csak tanuláshoz kell, de egy-egy kisebb appot kitennék élesbe is, ezért kellene az apache.

Köszi

Hozzászólások

Hi,

2.7.x telepítéshez lásd: http://askubuntu.com/questions/101591/how-do-i-install-python-2-7-2-on-…

Kezdőként a 2-es vagy a 3-as használatát javasoljátok?
Is-is. Használj 2.7-et, de vedd figyelembe a 3.x változásokat, pl. print_function... ("from __future__" importok)

Hogy érdemes csinálni? Használjam fejlesztéshez a beépített webszervert?
Simán. Ha használsz valami frameworköt, akkor készen kapsz valami egyszerű dev servert a kódoláshoz.

Van értelme több verziót kipróbálni/használni?
latest stable 2.7 és latest stable 3.2 ágon kívül, nincs értelme más verziókkal foglalkozni. Csak nagyon speciális esetekben...

Mi a helyzet mysql driverrel? 2-es alatt megy, de a 3-asról azt olvastam nem túl friss postokban, hogy nem megoldott 100%-ig a dolog.
Szerintem ezen a téren azért az elmúlt 1.5 évben sokat léptünk előre. Ismertebb adatbázisokkal nem kell, hogy gond legyen 3-as verzió esetén sem.

--
laco

uwsgi (igény esetén akár több instance is) + Virtualenv + Apache HTTP (vagy FCGI) proxy kell neked.
Ezek megoldják a problémádat, sztem mod_wsgi-ből csak egyet tudsz egy Apache instance alá betölteni.
uwsgi-t külön tudsz telepíteni Virtualenv-enként és külön tudod futtatni őket.
Apache-ban meg projektenként arra a uwsgi-re proxy-zol amelyikre akarsz.
A uwsgi-t ne csomagkezekővel telepítsd, hanem pip-el a Virtualenv-be bele.

Szerk.:
https://wiki.python.org/moin/Python2orPython3
Ha kettest használsz, akkor a from __future__ dolgok mindenképpen hasznosak szerintem...

♲♻♲

Valami ilyesmire gondoltam. Köszi. Jelenleg ott tartok, hogy pyenv-et telepítettem és a 2.7.5 és a 3.3.2 verziókat behúztam alatta. Van frissen telepített apache, mysql, sqlite3. Telepítsem a virtualenv-et és pippel az uwgi-t mindkét verzió alá? Ha jól értem ez után már csak a virtualhostokat kell megfelelően confolni ill. ha a projekt wsgi fájlját megfelelően beállítani?

Sikerült apache alá tenni uwsgivel. Köszi :)

pip-el telepítettem: virtualenv, virtualenvwrapper, utána létre hoztam egy virtuális környezetet, amibe megint pip-el feltettem a Django-t és a uwsgi-t

Ezek után a virtualhost-ot módisítottam úgy, hogy felvettem ezeket a sorokat:

Options FollowSymLinks Indexes
SetHandler uwsgi-handler
uWSGISocket 127.0.0.1:3031

és készítettem a projekt könyvtárban egy django_test.py filet ezzel a tartalommal:

import os
#substitute mysite with the name of your project !!!
os.environ['DJANGO_SETTINGS_MODULE'] = 'projektnev.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Utána futtattam az uwsgi-t a projekt könyvtárban:

uwsgi --socket 127.0.0.1:3031 --chdir /var/www/django_test/ --pp .. --wsgi-file /var/www/django_test/dyango_wsgi.py

és újraindítottam az apache-ot.

Valahogy így gondoltad a proxyzást?

Jónak tűnik, köszi.

Bár nem látok minden részletet, igen, ilyesmire gondoltam.
Az Apache uwsgi kommunikációhoz még érdemes ezt megnézni: http://uwsgi-docs.readthedocs.org/en/latest/Apache.html
Itt a mod_proxy_uwsgi-t ajánlják a jövőre nézve, bár fejlesztéshez sztem mindegy lesz, jó akár a sima HTTP proxy is.

♲♻♲

Köszönöm, átolvasom. Sok mindent kell megtanulni python témakörben.
A kulcs a pip-es uwsgi volt, ezzel nagyon sokat segítettél, mert a különböző verziók használata miatt nem jutottam előrébb az apache-al, így meg fél óra alatt megoldódott a dolog.

A mod_proxy_uwsgi hasonló módon telepíthető, mint a mod_uwsgi (libapache2-mod-uwsgi) vagy forrásból próbáljam?

A virtualenvwrapper.sh-t így használatával kapcsolatban azt olvastam, hogy a .bash_profile-ban kellenek ilyen sorok:

#source /home/vagrant/.pyenv/versions/3.3.2/bin/virtualenvwrapper.sh
source /home/vagrant/.pyenv/versions/2.7.5/bin/virtualenvwrapper.sh

Viszont azt tapasztaltam, hogy nem feltétlenül szükséges váltani. A vitrualenvwrapper.sh verziófüggetlen?

Az uwsgi daemonként futtatásához meg ha jól olvastam a paramétereket külön config (ini, xml) fájlban érdemes megadni.
Esetleg ezzel kapcsolatban tudsz tippet adni? Jó lenne úgy belőni, h. automatikusan induljon az uwsgi a nélkül, hogy a terminálban paranccsal indítanám.

- A mod_proxy_uwsgi hasonló módon telepíthető, mint a mod_uwsgi (libapache2-mod-uwsgi) vagy forrásból próbáljam?
Ha van csomagban az a legegyszerűbb, ha nincs akkor érdemes fordítani, de ha van egy működő megoldásod, akkor maradj annál, jó lesz fejlesztéshez.

- Viszont azt tapasztaltam, hogy nem feltétlenül szükséges váltani. A vitrualenvwrapper.sh verziófüggetlen?
vitrualenvwrapper-t nem ismerem, ez nekem is újdonság és köszi is érte.

- Az uwsgi daemonként futtatásához meg ha jól olvastam a paramétereket külön config (ini, xml) fájlban érdemes megadni.
Igen a külön config az mindenképpen hasznos hosszú távon.
Automatikus indításhoz: https://www.google.co.uk/search?q=uwsgi+init+script

♲♻♲

Azt persze, de a Python verziók nem különbözhetnek, mivel a Python verzió az lesz, amelyik Python-al maga a mod_wsgi fordítva lett...
Ezzel a módszerrel akárhány féle Python verziód lehet, verziónként pedig akárhány virtualenv.
Azt, hogy egy adott domain-en vagy URL-en melyik jelenjen meg pedig az Apache-ban döntheted el.

♲♻♲