2009-07-09 8 views
10

Pracuję nad małym projektem django, który zostanie wdrożony później w kontenerze serwletów. Ale rozwój jest znacznie szybszy, jeśli pracuję z cPython zamiast Jython. Tak więc chcę przetestować, czy mój kod działa na cPython lub Jython w moim pliku settiings.py, więc mogę powiedzieć, aby używał odpowiedniego sterownika db (postgresql_psycopg2 lub doj.backends.zxjdbc.postgresql). Czy istnieje prosty sposób na zrobienie tego?Czy mogę wykryć, czy mój kod działa na cPython lub Jython?

Odpowiedz

14

jeśli używasz Jython

import platform 
platform.system() 

powrót 'Java'
here has some discussion nadzieję, że to pomaga.

+1

+1: Uwielbiam, gdy dowiedziałem się o jakimś nowym rogu pytona! –

3

Będziesz mieć unikalny plik settings.py dla każdego innego środowiska.

Twoje ustawienia settings.py nie powinny być twoją kontrolą jakości lub testem ustawień.

To, co robimy, to jest to.

Mamy "master" settings.py, który zawiera zainstalowane aplikacje i inne elementy, które niewiele się zmieniają.

Mamy pliki specyficzne dla środowiska o nazwach takich jak settings_dev_win32.py i settings_qa_linux2.py i „settings_co_linux2.py` itp

Każde z tych ustawień środowiska specyficzne importuje ustawienia«master», a następnie przesłania rzeczy jak Sterownik DB. Ponieważ każdy plik ustawień jest unikalny dla środowiska, nie ma instrukcji if i nie wykrywa środowiska, w którym działamy.

Produkcja (w Apache, przy użyciu mod_wsgi i mysql) używa pliku settings_prod_linux2.py i żadnego innego.

Rozwój (w Windowsie przy użyciu sqlite) używa pliku settings_dev_win32.py.

19

Jak sunqiang wskazał

import platform 
platform.system() 

prace dla Jython 2.5, ale to nie działa na Jython 2.2 (poprzedniej wersji Jython). Podjęto również dyskusję na temat zwracania więcej szczegółów dotyczących systemu operacyjnego dla takich wywołań w Jython 3.x. Nic nie zostało postanowił tam, ale żeby być bezpiecznie do tyłu i do przodu kompatybilny, proponuję przy użyciu:

import sys 
sys.platform.startswith('java') 

Który powróci prawda dla Jython i fałszywe wszędzie indziej (w rzeczywistości w Jython 2.2 lub starszy zwraca 1 dla Jython i 0 wszędzie indziej, ale to nadal będzie działało dobrze w przypadku stwierdzeń i innych kontroli). To połączenie działa w języku Jython przynajmniej w wersji 2.1 i będzie działać w przewidywalnej przyszłości.

w Pythonie wersji 2.6 lub wyżej (nota Jython 2.6 nie został jeszcze wydany) Inną opcją jest:

import platform 
platform.python_implementation 

Które zwraca „CPython” dla realizacji C Pythona, „IronPython” dla IronPython i będzie zwróć "Jython" dla Jython. Oczywiście ta nie jest zgodna z poprzednimi wersjami poniżej 2.6, ale będzie kompatybilna z następnymi.

18

Najbardziej wyraźna sposobem jest:

platforma importu

platform.python_implementation()

'CPython'

Domyślnie przez większość czasu tłumacz bazowy to tylko CPython, który jest prawdopodobnie najbardziej efektywny :)

Powiązane problemy