2011-09-05 59 views
5

以外在蟒2.7,通过使用的Python __future__特定模块

from __future__ import division, print_function 

我现在可以有print(1/2)0.5表示。

然而,有可能有这自动导入到python启动?

我尝试使用sitecustomize.py特殊模块,但inport仅在模块内有效,而不在shell中有效。

因为我确信人们会问为什么我需要这样的东西:教给Python的青少年我注意到整数部分对他们来说并不容易,所以我们决定切换到Python 3.然而,该课程的一个要求是能够绘制功能和Matplotlib是相当不错的,但只对Python 2.7有效。

所以我的想法是使用自定义2.7安装...并不完美,但我没有更好的主意,让Matplotlib和新的“自然”部门“1/2 = 0.5”。

任何意见或可能是一个Matplotlib替代工作在Python 3.2?

回答

6

python 3上的matplotlib比你想象的更接近:https://github.com/matplotlib/matplotlib-py3; http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

为什么不使用PYTHONSTARTUP而不是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

是我见过的工作已经开始4个月前,但我没有设法手动安装numpy的(在我的64位计算机上),所以我最终使用这个软件包:http://www.enthought.com/products/epd_free.php 我会尝试PYTHONSTARTUP –

+0

'PYTHONSTARTUP'肯定是要走的路。 –

0

这可能不实用,但您可能能够编译自定义Python,并且Python 3分割行为被反向移植。这个问题是matplotlib可能需要Python 2的行为(虽然我不确定)。

2

无需编译新版本的Python 2.x.你可以在启动时做到这一点。

如您所见,sitecustomize.py无效。这是因为from __future__ import IDENTIFIER不是的导入。它标记要在特殊规则下编译的模块。任何使用这些功能的模块必须具有导入__future__以及交互式控制台。

以下shell命令将divisionprint_function积极启动交互式控制台:

python -ic "from __future__ import division, print_function" 

你可以别名python(在Linux上)或设置一个启动器来隐藏多余的东西。

如果您使用的是IDLE,PYTHONSTARTUP脚本@DSM建议应该在那里工作。

请注意,这些在整个解释器中都不是全局的,它只影响交互式控制台。文件系统上的模块必须明确地从__future__导入才能使用该功能。如果这是一个问题,我建议做掉了所有所需的进口模板的基础工作:

# True division 
from __future__ import division 

# Modules 
import matplotlib 

# ... code ... 

def main(): 
    pass 

if __name__ == "__main__": 
    main() 
相关问题