Import module with non-standard file name

Ben Finney bignose+hates-spam at benfinney.id.au
Fri Aug 18 00:12:27 EDT 2006


"Martin v. Löwis" <martin at v.loewis.de> writes:

> Ben Finney schrieb:
> > Question: I have Python modules named without '.py' as the extension,
> > and I'd like to be able to import them. How can I do that?
> 
> I recommend to use imp.load_module.

I've tried this; as Patrick Maupin alludes to, it compiles the module
leaving a strangely-named file behind.

Program in a file named 'frob_foo'; no other file names needed nor
desired.

    import imp

    file_name = "frob_foo"
    module_name = 'frob_foo'

    module_file = open(file_name, 'r')
    module_desc = ("", 'r', imp.PY_SOURCE)
    module = imp.load_module(module_name, module_file, file_name, module_desc)

Result: two files, 'frob_foo' and 'frob_fooc'. I can see why this
happens, but it's not what's desired. Currently I'm going with:

    file_name = "frob_foo"
    module_name = 'frob_foo'

    from types import ModuleType
    module = ModuleType(module_name)

    module_file = open(file_name, 'r')
    exec module_file in module.__dict__

Still, the purpose is simply to get a module object out, with a named
file as input. If the 'imp' module can do that without leaving
unwanted turds behind, it seems more elegant. Can anyone suggest a way
to get the same result as the above 'exec' method, using the 'imp'
module?

-- 
 \      "...one of the main causes of the fall of the Roman Empire was |
  `\        that, lacking zero, they had no way to indicate successful |
_o__)               termination of their C programs."  -- Robert Firth |
Ben Finney




More information about the Python-list mailing list