Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > TypeError: 'module' object is not callable (newby question)

Reply
Thread Tools

TypeError: 'module' object is not callable (newby question)

 
 
Charles Russell
Guest
Posts: n/a
 
      08-14-2006
Why does this work from the python prompt, but fail from a script?
How does one make it work from a script?

#! /usr/bin/python
import glob
# following line works from python prompt; why not in script?
files=glob.glob('*.py')
print files

Traceback (most recent call last):
File "./glob.py", line 2, in ?
import glob
File "/home/cdr/python/glob.py", line 5, in ?
files=glob.glob('*.py')
TypeError: 'module' object is not callable
 
Reply With Quote
 
 
 
 
faulkner
Guest
Posts: n/a
 
      08-14-2006
works for me. do you do anything in your script besides that?


Charles Russell wrote:
> Why does this work from the python prompt, but fail from a script?
> How does one make it work from a script?
>
> #! /usr/bin/python
> import glob
> # following line works from python prompt; why not in script?
> files=glob.glob('*.py')
> print files
>
> Traceback (most recent call last):
> File "./glob.py", line 2, in ?
> import glob
> File "/home/cdr/python/glob.py", line 5, in ?
> files=glob.glob('*.py')
> TypeError: 'module' object is not callable


 
Reply With Quote
 
 
 
 
Marc 'BlackJack' Rintsch
Guest
Posts: n/a
 
      08-14-2006
In <yp2Eg.1858$VQ.825@trndny05>, Charles Russell wrote:

> Why does this work from the python prompt, but fail from a script?
> How does one make it work from a script?
>
> #! /usr/bin/python
> import glob
> # following line works from python prompt; why not in script?
> files=glob.glob('*.py')
> print files
>
> Traceback (most recent call last):
> File "./glob.py", line 2, in ?
> import glob
> File "/home/cdr/python/glob.py", line 5, in ?
> files=glob.glob('*.py')
> TypeError: 'module' object is not callable


Don't call your file `glob.py` because then you import this module and not
the `glob` module from the standard library.

Ciao,
Marc 'BlackJack' Rintsch
 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      08-14-2006
Charles Russell wrote:
> Why does this work from the python prompt, but fail from a script?
> How does one make it work from a script?
>
> #! /usr/bin/python
> import glob
> # following line works from python prompt; why not in script?
> files=glob.glob('*.py')
> print files
>
> Traceback (most recent call last):
> File "./glob.py", line 2, in ?
> import glob
> File "/home/cdr/python/glob.py", line 5, in ?
> files=glob.glob('*.py')
> TypeError: 'module' object is not callable


Short answer: Change the name of your script file.

Long answer:

<humour>
It is attempting to emulate the mythical ooloo bird, which is allegedly
capable of evading would-be predators by vanishing up its own
fundamental orifice. This topological exploit won't be available in
Python until the as yet still mythical Python 3000.
</humour>

Contemplate the following:

C:\junk>type glob.py
if __name__ == "__main__":
print "*** Being run as a script ..."
import glob
print "glob was imported from", glob.__file__
print "glob.glob is", type(glob.glob)
print "glob.glob was imported from", glob.glob.__file__
print "(glob.glob is glob) is", glob.glob is glob
print "--- end of script"
else:
print "*** Aarrgghh!! I'm being imported as", __name__
import glob
print "glob was imported from", glob.__file__
print "glob.glob is", type(glob.glob)
print "glob.glob was imported from", glob.glob.__file__
print "(glob.glob is glob) is", glob.glob is glob
print "--- end of import"

C:\junk>glob.py
*** Being run as a script ...
*** Aarrgghh!! I'm being imported as glob
glob was imported from C:\junk\glob.pyc
glob.glob is <type 'module'>
glob.glob was imported from C:\junk\glob.pyc
(glob.glob is glob) is True
--- end of import
glob was imported from C:\junk\glob.pyc
glob.glob is <type 'module'>
glob.glob was imported from C:\junk\glob.pyc
(glob.glob is glob) is True
--- end of script

HTH,
John

C:\junk>

 
Reply With Quote
 
Charles Russell
Guest
Posts: n/a
 
      08-14-2006
Marc 'BlackJack' Rintsch wrote:

>
> Don't call your file `glob.py` because then you import this module and not
> the `glob` module from the standard library.
>
> Ciao,
> Marc 'BlackJack' Rintsch


Yes, thanks. Renaming to myglob.py solved the problem. But why does the
conflict not occur when the code is run interactively from the python
prompt? Somewhat related - I haven't found the magic word to invoke a
..py script from the python prompt (like the command "source" in csh,
bash, tcl?) "import" runs the script, but then complains that it is not
a module.
 
Reply With Quote
 
Charles Russell
Guest
Posts: n/a
 
      08-14-2006
John Machin wrote:

>
> Contemplate the following:
>
> C:\junk>type glob.py
> if __name__ == "__main__":
> print "*** Being run as a script ..."
> import glob
> print "glob was imported from", glob.__file__
> print "glob.glob is", type(glob.glob)
> print "glob.glob was imported from", glob.glob.__file__
> print "(glob.glob is glob) is", glob.glob is glob
> print "--- end of script"
> else:
> print "*** Aarrgghh!! I'm being imported as", __name__
> import glob
> print "glob was imported from", glob.__file__
> print "glob.glob is", type(glob.glob)
> print "glob.glob was imported from", glob.glob.__file__
> print "(glob.glob is glob) is", glob.glob is glob
> print "--- end of import"
>


Thanks. Another newby question: __name__ and __file__ appear to be
predefined variables. To look up their meaning in the manual, is there
some method less clumsy than grepping the whole collection of .html
source files? I can't find any comprehensive index.
 
Reply With Quote
 
Charles Russell
Guest
Posts: n/a
 
      08-14-2006
Charles Russell wrote:

But why does the
> conflict not occur when the code is run interactively from the python
> prompt?


Because, I now realize, I had not yet created glob.py when I tried that.
 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      08-14-2006

Charles Russell wrote:
> Marc 'BlackJack' Rintsch wrote:
>
> >
> > Don't call your file `glob.py` because then you import this module and not
> > the `glob` module from the standard library.
> >
> > Ciao,
> > Marc 'BlackJack' Rintsch

>
> Yes, thanks. Renaming to myglob.py solved the problem. But why does the
> conflict not occur when the code is run interactively from the python
> prompt?


It does for me on Windows -- see below --because '' (representing the
cwd) is injected at the front of sys.path. *xMMV of course. Or perhaps
when you ran it your cwd was some other directory.

C:\junk>dir glob*
[snip]
15/08/2006 04:28 AM 662 glob.py
15/08/2006 04:28 AM 592 glob.pyc
[snip]
C:\junk>python
Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
|>>> import glob
*** Aarrgghh!! I'm being imported as glob
glob was imported from glob.pyc
glob.glob is <type 'module'>
glob.glob was imported from glob.pyc
(glob.glob is glob) is True
--- end of import
|>>>

Cheers,
John

 
Reply With Quote
 
Marc 'BlackJack' Rintsch
Guest
Posts: n/a
 
      08-15-2006
In <0E5Eg.19638$yE1.18048@trndny02>, Charles Russell wrote:

> Another newby question: __name__ and __file__ appear to be
> predefined variables. To look up their meaning in the manual, is there
> some method less clumsy than grepping the whole collection of .html
> source files? I can't find any comprehensive index.


Here's the index of the reference manual:

http://docs.python.org/ref/genindex.html

Ciao,
Marc 'BlackJack' Rintsch
 
Reply With Quote
 
Charles Russell
Guest
Posts: n/a
 
      08-15-2006
Charles Russell wrote:
I haven't found the magic word to invoke a
> .py script from the python prompt (like the command "source" in csh,
> bash, tcl?)


Seems to be execfile()
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Making Non Callable Objects Callable exiquio Python 2 10-07-2008 06:02 PM
Static method object not callable Edward Diener Python 8 03-27-2008 09:51 PM
Why TypeError: 'str' object is not callable? Randall Parker Python 5 03-22-2006 10:30 PM
error: 'staticmethod' object is not callable Michal Vitecek Python 4 02-11-2004 03:20 PM
Re: 'int' object is not callable Erik Max Francis Python 0 07-23-2003 02:06 AM



Advertisments