Import module with non-standard file name
Ben Finney
bignose+hates-spam at benfinney.id.au
Tue Aug 8 02:58:07 EDT 2006
"Patrick Maupin" <pmaupin at gmail.com> writes:
> Ben Finney wrote:
> > 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?
>
> This is a piece of cake in Python.
>
> >>> from types import ModuleType
> >>> x = ModuleType('myModName')
> >>> data = open('myfilename').read()
> >>> exec data in x.__dict__
> Your output here...
>
> This won't save a .pyc, but as your message later explains, this is for
> unittesting, so this could probably be considered a feature for this
> usage.
Very nice. Okay, my unit testing scaffold module now has a new function:
def make_module_from_file(module_name, file_name):
""" Make a new module object from the code in specified file """
from types import ModuleType
module = ModuleType(module_name)
module_file = open(file_name, 'r')
exec module_file in module.__dict__
return module
The unit test now just imports that functionality, and then makes the
module object via that function:
import scaffold
module_name = 'frobnicate_foo'
module_file_under_test = os.path.join(scaffold.code_dir, 'frobnicate-foo')
frobnicate_foo = scaffold.make_module_from_file(
module_name, module_file_under_test)
The rest of the unit test then has 'frobnicate_foo' as a module to test.
It's working fine. Does anyone foresee any problems with doing it this way?
--
\ "Injustice is relatively easy to bear; what stings is justice." |
`\ -- Henry L. Mencken |
_o__) |
Ben Finney
More information about the Python-list
mailing list