Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does this work in the Python IDLE shell but not when I run it as a Python script from the command prompt? [duplicate]

This works in the Python 3.3.2 Shell

Inside the Python 3.3.2 Shell

>>> import datetime
>>> print(datetime.datetime.utcnow())
2013-07-09 19:40:32.532341

That's great! I then wrote a simple text file named "datetime.py"

Inside Datetime.py

#Date time
import datetime
print(datetime.datetime.utcnow())
#Prints GMT, which is named Universal Coordinated Time
# Which is UTC because in French it's something like
# Universahl Tyme Coordinatay
#Outputs something like 2013-07-09 15:15:19.695531

Proving that the file exists

C:\Python33\myscripts>ls
__pycache__  ex1.out  ex2.out  ex3.py    helloworld.py              read1.py
datetime.py  ex1.py   ex2.py   first.py  pythonintoimportexport.py  test.py

Here is where it gets mysterious!

C:\Python33\myscripts>python datetime.py
Traceback (most recent call last):
  File "datetime.py", line 2, in <module>
    import datetime
  File "C:\Python33\myscripts\datetime.py", line 3, in <module>
    print(datetime.datetime.utcnow())
AttributeError: 'module' object has no attribute 'utcnow'

Question

Why does the same code work in the Python Shell, but not when run as a script?

like image 811
Rentsy Avatar asked Jul 09 '13 20:07

Rentsy


1 Answers

The problem is that file is recursively importing itself, instead of importing the built-in module datetime:

Demo:

$ cat datetime.py
import datetime
print datetime.__file__
$ python datetime.py
/home/monty/py/datetime.pyc
/home/monty/py/datetime.pyc

This happens because the module is searched in this order:

  • the directory containing the input script (or the current directory).
  • PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).
  • the installation-dependent default.

Simply change the name of datetime.py to something else.

like image 180
Ashwini Chaudhary Avatar answered Nov 13 '22 15:11

Ashwini Chaudhary