Console vs scripting python constants
The python console has various convenience imports, from math import *  being one of them. 

Text from the console:

PYTHON INTERACTIVE CONSOLE 3.3.2 (default, May 21 2013, 15:40:45)  [GCC 4.8.0 20130502 (prerelease)]

Command History:     Up/Down Arrow
Cursor:              Left/Right Home/End
Remove:              Backspace/Delete
Execute:             Enter
Autocomplete:        Ctrl-Space
Zoom:                Ctrl +/-, Ctrl-Wheel
Builtin Modules:     bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bpy.utils, bgl, blf, mathutils
Convenience Imports: from mathutils import *; from math import *
Convenience Variables: C = bpy.context, D = bpy.data

&gt;&gt;&gt; pi
3.141592653589793


Importing the entirety of a module using * when not experimenting in the console is generally seen as bad practice / not pythonic, and explained in part here. 


  Remember, you can never know for sure what names a module exports, so
  either take what you need — from module import name1, name2, or keep
  them in the module and access on a per-need basis


For scripting outside of the console use explicit imports. Create a template with all your frequently used imports, similar to this, and place it in the ../scripts/templates_py/ folder:  

import bpy
import mathutils
from mathutils import Vector, Matrix
from math import pi, sin, cos, tan


this article goes into great detail about code structure and includes a short section on imports, definitely food for thought if the topic isn't well understood.