2011-11-15 17 views
7

Piszę aplikację internetową Django. Od teraz, Django does not support Python 3. Na potrzeby mojej aplikacji internetowej i bez wchodzenia w szczegóły, zasadniczo potrzebuję korzystać z niektórych bibliotek, które obsługują tylko Python 3. Wystarczy powiedzieć, że po wielu dokładnych badaniach znaleziono drugą opcję.Jaka jest najlepsza metoda wywoływania programu Python 3.x z poziomu Pythona 2.x?

Moje pytanie brzmi następująco: jak mam to zrobić?

Mam zarówno Python 2 i 3 zainstalowany na moim serwerze, i mam napisany kod Python 3 i czeka na wywołanie. Rozważałem po prostu użycie modułu subprocess, skutecznie wywołując Python 3 z wiersza poleceń, ale pytanie brzmi, czy jest to najlepsza metoda, czy też istnieje najlepsza praktyka, którą mógłbym zamiast tego zastosować? Używanie subprocess wydaje mi się dość hackowskie. Nie zrozumcie mnie źle, jestem w porządku z hackish, chcę tylko upewnić się, że nie ma nic innego, co powinienem robić.

+0

Co powiesz na używanie [cherrypy] (http://cherrypy.org/) i robienie wszystkiego w Pythonie 3? –

+0

xmlrpc może być prostą alternatywą dla podprocesingu – gecco

+1

Czy próbowałeś użyć programu 3to2, aby sprawdzić, czy nieokreślone biblioteki tylko Python 3 można automatycznie przekonwertować na język Python 2? Czy próbowałeś użyć portu Martina von Löwisa [port Django do Pythona 3] (https://bitbucket.org/loewis/django-3k/), więc wszystko działa w Pythonie 3? –

Odpowiedz

6

Od Python Python 3 i 2 są całkowicie oddzielne tłumaczy wykonywalne i mają oddzielne biblioteki zainstalowane w systemie, używając subprocess powołać się na jedną z pozostałych jest najlepsza praktyka. To wcale nie jest hack. Istnieje kilka sposobów przekazywania danych między nimi, ale dwóch tłumaczy powinno być uruchamianych jako oddzielne procesy.

To powiedziawszy, być może trzeba będzie wziąć pod uwagę czas uruchamiania związany z uruchomieniem procesu tłumacza. To wraca do sposobu przekazywania danych między dwoma procesami. Jeśli twój kod Pythona 2 będzie często wywoływał procedury Pythona 3, może zajść potrzeba skonstruowania programu Python 3 jako demona. Ale nadal będziesz używał subprocess, aby go uruchomić.

+0

Awesome. Dzięki wielkie. Co do tego, czy musi się skończyć jako proces ... który będzie wymagał przemyśleń. Trzeba go wywołać tylko raz, gdy użytkownik się zarejestruje, więc może nie musi być na krótką metę, ale teoretycznie, jeśli moja aplikacja internetowa stanie się użyteczna, może to być wygodna rzecz. Cały proces nie powinien zająć więcej niż 5 sekund, nawet jeśli połączenie internetowe jest naprawdę wolne. –

1

Uruchomić program 3.x jako oddzielną usługę, a następnie połączyć za pomocą pewnego mechanizmu RPC?

Powiązane problemy