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

M

mrstephengross

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
 
R

Rick Dooling

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
 
J

John Krukoff

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

I recently solved a similar issue, importing from a string, with this
code:

You could probably shorten it for your needs by using execfile instead.
If it's not in the current directory, you'll probably run into some
issues with further imports not working as expected unless you set the
names/paths right.
 
G

George Sakkis

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
 
G

Gabriel Genellina

En Wed, 12 Mar 2008 18:02:54 -0200, Jean-Paul Calderone
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...adc39ac/3882ce35f13ff971#msg_96a590bca5f2be8c
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).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,022
Latest member
MaybelleMa

Latest Threads

Top