2009-12-17 11 views
6

Quale versione di Python può consigliare per un progetto a lungo termine (anni)? Si dovrebbe usare 2.6+ o 3.x è già stabile? (sono richieste solo le librerie standard)Python - Si dovrebbe avviare un nuovo progetto direttamente in Python 3.x?

AGGIORNAMENTO: in base alle risposte di seguito, Python 3.x ha ancora bug critici. Si prega di vedere anche Python's list of bugs.

+2

Il problema, come sempre, è con le librerie di terze parti. – Skilldrick

+0

"Python 3.x ha ancora bug critici"? Dei 32 segnati "critici", la maggior parte sembra essere "traballante". Una perdita di memoria sembra essere effettivamente "critica". Penso che "bug critici" potrebbero essere un'esagerazione. –

risposta

2

Penso che si riduca a quanto strettamente è possibile controllare l'ambiente in cui verrà eseguita l'applicazione. Se stai producendo un pezzo di software in cui il tuo cliente "installerà" python per eseguire il tuo software, allora potresti anche usare l'ultima versione (Python 3.x). Se stai mirando a installazioni Python esistenti, la scelta della compatibilità 2.5 o 2.6 sarebbe la migliore poiché quelle più diffuse.

Python 3.x è stabile. Questo non è il problema. Il problema con esso è la compatibilità. Se hai la possibilità di usare l'ultima e la migliore, dovresti usare la nuova versione. Per i nuovi progetti, 3.x sarebbe la scelta più ovvia.

+0

Lo sai, sarà supportato da Python 3.x true multithreading? – psihodelia

+1

@psihodelia, se si intende, senza GIL che impedisce a CPython di sfruttare appieno i processori multicore senza ricorrere al pacchetto multiprocessing, la risposta è no, Python 3 non risolverà il problema AFAIK. –

+0

Significa che, anche se in N-anno avremo più CPU, solo un thread potrebbe fare cose alla volta. Destra? Così male ... – psihodelia

0

Se si sta avviando il progetto ora e tutte le librerie di terze parti che si desidera utilizzare sono già state trasferite su Python 3 e il proprio sistema operativo di destinazione (intendo realmente distribuzione Linux) Python 3, quindi sicuro.

Vai avanti, utilizzare Python 3.

4

Non c'è niente di sbagliato in Python 3, ma molte librerie non sono ancora stati portati. Ad esempio, dal PyGame FAQ:

Python 3 supporto è incompleta e ancora in fase di sviluppo

E da NumPy:

supporto per Python 3 è prevista, ma non ancora in programma .

Tutto dipende da quanto sono importanti le librerie di terze parti e se sono già state trasferite.

+1

@Skilldrick, la versione di Python 3.0 ha avuto qualcosa di sbagliato, se ricordo, che era una prestazione abissale nell'I/O dei file. Se fosse vero, è stato corretto completamente in 3.1, o ci sono ancora dei problemi di performance abbastanza significativi relativi a Python 2.x? –

+0

In base a questo ha: http://bugs.python.org/issue4565 – Skilldrick

+1

http://docs.python.org/3.1/whatsnew/3.1.html#optimizations –

4

La cosa buona di Python3 è che there is a automatic way to port your programs da Python2. Ma il programma deve soddisfare determinati criteri.

Penso che l'approccio migliore per ora sia scrivere il codice Python2 e testarlo in modalità test Python3 (esegui python -3 program.py). In questo modo non devi preoccuparti delle librerie mancanti ora e puoi convertire il tuo programma in Python3 non appena ciò ha senso.

1

THC4k mentions 2to3, e volevo solo sottolineare che c'è anche un 3to2 package. Non ho mai usato nessuno dei due pacchetti, ma ho sentito che 3to2 è più indulgente di 2to3.

Modifica: volevo solo sottolineare ciò che altri hanno suggerito: se scegli di utilizzare uno di questi convertitori per rilasciare il tuo software per 2.6 o 3.0, probabilmente vorrai avere un solido sistema di test in atto (unittest, doctest, ecc.) con una copertura di prova decente per dormire sonni tranquilli durante la notte!

9

Per questo motivo si dovrebbe usare Python 3.x:

Python 2.x:

>>>True = False 
>>>True 
False 

Python 3.x:

>>> True = False 
    File "<stdin>", line 1 
SyntaxError: assignment to keyword 

Fonte: Strangest language feature

Pregiudizio: Ma così tanti pacchetti non sono ancora pronti Python 3

Questo è (a) non vero (source) e (b) non importante per un principiante.

Problemi correlati