Python __future__在特定模块之外

时间:2011-09-05 02:30:46

标签: python matplotlib

在python 2.7中,使用

 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”。

任何建议或可能是在python 3.2上运行的Matplotlib替代方案?

3 个答案:

答案 0 :(得分: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,>>> 

答案 1 :(得分: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,@ DSM建议的PYTHONSTARTUP脚本也应该在那里工作。

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

# True division
from __future__ import division

# Modules
import matplotlib

# ... code ...

def main():
    pass

if __name__ == "__main__":
    main()

答案 2 :(得分:0)

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