|
Hi all,
I have a script responsible for loading and executing scripts on a
daily basis. Something like this:
import time
t = time.gmtime()
filename = t[0] + '-' + t[1] + '-' + t[2] + '.py'
import filename
So, I have a module with an arbitrary file name and I want to load it,
and later access its function definitions.
How can I do this ? In my example, the last line will obviously not
work. | |
Share:
|
wrote in news:11**********************@i42g2000cwa.googlegr oups.com in
comp.lang.python:
Hi all,
I have a script responsible for loading and executing scripts on a
daily basis. Something like this:
import time
t = time.gmtime()
filename = t[0] + '-' + t[1] + '-' + t[2] + '.py'
import filename
So, I have a module with an arbitrary file name and I want to load it,
and later access its function definitions.
How can I do this ? In my example, the last line will obviously not
work. http://docs.python.org/lib/built-in-funcs.html
The first one __import__ should do the trick.
Rob.
-- http://www.victim-prime.dsl.pipex.com/ | | | le***********@gmail.com wrote:
I have a script responsible for loading and executing scripts on a
daily basis. Something like this:
import time
t = time.gmtime()
filename = t[0] + '-' + t[1] + '-' + t[2] + '.py'
import filename
So, I have a module with an arbitrary file name and I want to load it,
and later access its function definitions.
execfile() is probably your best bet:
namespace = {}
execfile(filename, namespace)
namespace["function"](argument)
also see: http://effbot.org/zone/import-string...ng-by-filename
</F> | | |
I had to do something like this a while back for a modular IRC bot that
I wrote.
__import__() will do the trick, however to avoid getting a cache of the
module I recomend doing something like...
mod = reload( __import__("%s-%s-%s" % ( t[0], t[1], t[2] ) ) ) le***********@gmail.com wrote:
Hi all,
I have a script responsible for loading and executing scripts on a
daily basis. Something like this:
import time
t = time.gmtime()
filename = t[0] + '-' + t[1] + '-' + t[2] + '.py'
import filename
So, I have a module with an arbitrary file name and I want to load it,
and later access its function definitions.
How can I do this ? In my example, the last line will obviously not
work.
| | | le***********@gmail.com writes:
So, I have a module with an arbitrary file name and I want to load it,
and later access its function definitions.
How can I do this ? In my example, the last line will obviously not
work.
If you want a solution that gives you an actual module object, here's
what I use:
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
--
\ "A celebrity is one who is known by many people he is glad he |
`\ doesn't know." -- Henry L. Mencken |
_o__) |
Ben Finney | | |
On Tue, 31 Oct 2006 11:00:52 +1100, Ben Finney wrote:
If you want a solution that gives you an actual module object, here's
what I use:
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
Isn't that awfully complicated? What's wrong with using __import__ to get
a module object?
>>mod = __import__("math") mod
<module 'math' from '/usr/lib/python2.4/lib-dynload/mathmodule.so'>
The only advantage (or maybe it is a disadvantage?) I can see to your
function is that it doesn't search the Python path and you can specify an
absolute file name.
--
Steven. | | |
Steven D'Aprano wrote:
The only advantage (or maybe it is a disadvantage?) I can see to your
function is that it doesn't search the Python path and you can specify an
absolute file name.
that's the whole point of doing an explicit load, of course. if you
think that's a disadvantage, you haven't done enough plugin work...
</F> | | |
"Steven D'Aprano" <st***@REMOVE.THIS.cybersource.com.auwrites:
On Tue, 31 Oct 2006 11:00:52 +1100, Ben Finney wrote:
If you want a solution that gives you an actual module object,
here's what I use:
def make_module_from_file(module_name, file_name):
""" Make a new module object from the code in specified file """
The only advantage (or maybe it is a disadvantage?) I can see to
your function is that it doesn't search the Python path and you can
specify an absolute file name.
Which is exactly what the OP asked for (though he didn't necessarily
need a module object).
--
\ "We have to go forth and crush every world view that doesn't |
`\ believe in tolerance and free speech." -- David Brin |
_o__) |
Ben Finney | | |
On Tue, 31 Oct 2006 12:44:50 +0100, Fredrik Lundh wrote:
Steven D'Aprano wrote:
>The only advantage (or maybe it is a disadvantage?) I can see to your function is that it doesn't search the Python path and you can specify an absolute file name.
that's the whole point of doing an explicit load, of course. if you
think that's a disadvantage, you haven't done enough plugin work...
Guilty as charged.
--
Steven. | | |
On Tue, 31 Oct 2006 22:53:56 +1100, Ben Finney wrote:
"Steven D'Aprano" <st***@REMOVE.THIS.cybersource.com.auwrites:
>On Tue, 31 Oct 2006 11:00:52 +1100, Ben Finney wrote:
If you want a solution that gives you an actual module object,
here's what I use:
def make_module_from_file(module_name, file_name):
""" Make a new module object from the code in specified file """
The only advantage (or maybe it is a disadvantage?) I can see to your function is that it doesn't search the Python path and you can specify an absolute file name.
Which is exactly what the OP asked for (though he didn't necessarily
need a module object).
I'm not arguing, you could very well be right, but I'm just curious what
part of the OP's post led you to believe he needed to specify an absolute
filename. Unless I'm missing a second post, he certainly never suggested
that his scripts weren't in the Python path, or that he couldn't add their
location to the path.
*shrug* It probably isn't important -- given the constraints as you read
them (extrapolated them?) your solution looks good.
--
Steven. | | |
Steven D'Aprano wrote:
I'm not arguing, you could very well be right, but I'm just curious what
part of the OP's post led you to believe he needed to specify an absolute
filename. Unless I'm missing a second post, he certainly never suggested
that his scripts weren't in the Python path, or that he couldn't add their
location to the path.
the fact that he's using dashes in the module name might be a hint, though.
in current versions, __import__ doesn't care as long as the file has
the right extension, but import requires valid Python identifiers, for
obvious reasons.
execfile doesn't care about any part of the filename, of course (and if
you replace it with exec, you don't even have to read the script from a
file).
</F> | | This discussion thread is closed Replies have been disabled for this discussion. Similar topics
reply
views
Thread by John F Dutcher |
last post: by
|
5 posts
views
Thread by Steve Holden |
last post: by
|
reply
views
Thread by Bill Davy |
last post: by
|
11 posts
views
Thread by could ildg |
last post: by
|
79 posts
views
Thread by pinkfloydhomer |
last post: by
|
10 posts
views
Thread by py |
last post: by
|
14 posts
views
Thread by DataSmash |
last post: by
|
9 posts
views
Thread by fegge |
last post: by
|
10 posts
views
Thread by Jia Lu |
last post: by
| | | | | | | | | | |