2011-09-05 15 views
5

In pitone 2.7 basepitone __future__ al di fuori di un modulo specifico

from __future__ import division, print_function 

ora posso avere print(1/2) mostra 0.5.

Tuttavia è possibile averlo importato automaticamente all'avvio di python?

Ho provato a utilizzare il modulo speciale sitecustomize.py ma l'inport è valido solo all'interno del modulo e non nella shell.

Come sono sicuro che la gente chiederà perché ho bisogno che: insegnare agli adolescenti Python ho notato che la divisione intero non è stato facile per loro, così abbiamo deciso di passare a Python 3. Tuttavia uno dei requisiti del corso è stato essere in grado di tracciare la funzione e Matplotlib è abbastanza buono ma valido solo per Python 2.7.

Quindi la mia idea era di usare un'installazione personalizzata 2.7 ... non perfetta ma non ho un'idea migliore di avere sia Matplotlib che la nuova divisione "naturale" "1/2 = 0,5".

Qualche consiglio o forse un'alternativa Matplotlib che funziona su python 3.2?

risposta

6

matplotlib su python 3 è più vicino di quanto si possa pensare: https://github.com/matplotlib/matplotlib-py3; http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib.

Perché non utilizzare PYTHONSTARTUP anziché sitecustomize.py?

localhost-2:~ $ cat startup.py 
from __future__ import print_function 
from __future__ import division 
localhost-2:~ $ export PYTHONSTARTUP="" 
localhost-2:~ $ python 
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1/2 
0 
>>> print("fred",end=",") 
    File "<stdin>", line 1 
    print("fred",end=",") 
        ^
SyntaxError: invalid syntax 
>>> ^D 
localhost-2:~ $ export PYTHONSTARTUP=startup.py 
localhost-2:~ $ python 
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 1/2 
0.5 
>>> print("fred",end=",") 
fred,>>> 
+0

Sì ho visto il lavoro è iniziato 4 mesi fa, ma non mi riesce a installare manualmente NumPy (sul mio computer a 64 bit) quindi ho finito per utilizzare questo pacchetto: http://www.enthought.com/products/epd_free.php Proverò PYTHONSTARTUP –

+0

'PYTHONSTARTUP' è sicuramente la strada da percorrere. –

0

Questo potrebbe non essere pratico, ma potresti essere in grado di compilare un Python personalizzato con il comportamento della divisione Python 3 backported. Il problema con questo è matplotlib potrebbe richiedere il comportamento di Python 2 (anche se non sono sicuro).

2

Non è necessario compilare una nuova versione di Python 2.x. È possibile fare questo all'avvio.

Come hai trovato, sitecustomize.py non funziona. Questo perché from __future__ import IDENTIFIERnon è un'importazione. Segnala il modulo da compilare in base a regole speciali. Qualsiasi modulo che utilizza tali funzioni deve avere l'importazione __future__ e la console interattiva.

Il seguente comando shell avviare la console interattiva con division e print_function attiva:

python -ic "from __future__ import division, print_function" 

Si potrebbe alias python (su Linux) o di impostare un programma di avvio per nascondere il materiale extra.

Se si utilizza IDLE, lo script PYTHONSTARTUP suggerisce @DSM dovrebbe funzionare anche lì.

Si noti che questi non sono globali nell'intero interprete, interessa solo la console interattiva. I moduli sul file system devono importare da __future__ in modo esplicito per utilizzare la funzione.Se questo è un problema, Suggerisco di fare un modello per il lavoro di base off di tutte le importazioni necessarie:

# True division 
from __future__ import division 

# Modules 
import matplotlib 

# ... code ... 

def main(): 
    pass 

if __name__ == "__main__": 
    main() 
Problemi correlati