By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,001 Members | 1,176 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,001 IT Pros & Developers. It's quick & easy.

Does __import__ require a module to have a .py suffix?

P: n/a
Hi all. I've got a python file called 'foo' (no extension). I want to
be able to load it as a module, like so:

m = __import__('foo')

However, the interpreter tells me "No module named foo". If I rename
it foo.py, I can indeed import it. Is the extension required? Is there
any way to override that requirement?

Thanks,
--Steve
Mar 12 '08 #1
Share this Question
Share on Google+
3 Replies


P: n/a
On Mar 12, 11:22 am, mrstephengross <mrstevegr...@gmail.comwrote:
Hi all. I've got a python file called 'foo' (no extension). I want to
be able to load it as a module, like so:

m = __import__('foo')

However, the interpreter tells me "No module named foo". If I rename
it foo.py, I can indeed import it. Is the extension required? Is there
any way to override that requirement?
I think you answered your own question, but if you want more info:

From the Python Tutorial:

http://docs.python.org/tut/node8.html

"A module is a file containing Python definitions and statements. The
file name is the module name with the suffix .py appended."

RD

Thanks,
--Steve
Mar 12 '08 #2

P: n/a
On Mar 12, 12:22 pm, mrstephengross <mrstevegr...@gmail.comwrote:
Hi all. I've got a python file called 'foo' (no extension). I want to
be able to load it as a module, like so:

m = __import__('foo')

However, the interpreter tells me "No module named foo". If I rename
it foo.py, I can indeed import it. Is the extension required? Is there
any way to override that requirement?
You can use execfile:

foo = {}
execfile('foo', foo)

Apart from the different syntax in accessing the module globals
(attributes with __import__ (foo.x) vs dict entries with execfile
(foo['x'])), there are probably more subtle differences but I can't
tell for sure. It would be nice if someone more knowledgeable can
compare and contrast these two appraches.

George
Mar 12 '08 #3

P: n/a
En Wed, 12 Mar 2008 18:02:54 -0200, Jean-Paul Calderone
<ex*****@divmod.comescribió:
On Wed, 12 Mar 2008 12:58:33 -0700 (PDT), George Sakkis
<ge***********@gmail.comwrote:
>On Mar 12, 12:22 pm, mrstephengross <mrstevegr...@gmail.comwrote:
>>Hi all. I've got a python file called 'foo' (no extension). I want to
be able to load it as a module, like so:

m = __import__('foo')
You can use execfile:

foo = {}
execfile('foo', foo)

Apart from the different syntax in accessing the module globals
(attributes with __import__ (foo.x) vs dict entries with execfile
(foo['x'])), there are probably more subtle differences but I can't
tell for sure. It would be nice if someone more knowledgeable can
compare and contrast these two appraches.

Another difference is that when you import a module, its code is
(usually)
only executed once. Each import after the first just returns a reference
to the already-created module object. When you use execfile, the code is
re-evaluated each time.
The steps done by import are outlined in this message
http://groups.google.com/group/comp....a590bca5f2be8c
The relevant part (citing myself):

newmodule = sys.modules[modulename] = ModuleType(modulename)
# constructor sets __name__ and a null __doc__
newmodule.__builtins__ = current builtins
newmodule.__file__ = filename
code = read from filename and compile it
exec code in newmodule.__dict__

Apart from sys.modules and __file__, there is another difference, the
__builtins__ attribute. It is important: if not present, Python executes
the code in "safe mode" where certain operations are disabled (and there
is a big performance penalty).

--
Gabriel Genellina

Mar 19 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.