how to run python2.6 module with absolute imports stand alone

Gelonida N gelonida at gmail.com
Sat Sep 8 22:03:56 EDT 2012


On 09/08/2012 02:13 AM, Mark Lawrence wrote:
> On 07/09/2012 23:04, Gelonida N wrote:
>> Hi,
>>
>> many of my modules contain following section at the end
>>
>>
>> def main():
>>      do_something()
>> if __name__ == '__main__':
>>      main()
>>
>> This allows me to run some basic example code
>> or some small test in a stand alone mode.
>>
>>
>> My new modules contain following line at the beginning:
>>
>> from __future__ import absolute_import
>>
>>
>> I like this:
>> - It can reduce import name conflicts
>> - and second it allows 'relative' imports like
>>     from .othermodule import funcname
>>     from ..mod_one_level_higher import fdfsd
>>
>>
>> However If I try to run such a script from the command line it will now
>> complain with
>>
>> ValueError: Attempted relative import in non-package
>>
>> Any tricks to work around this ???
>>
>> The only idea, that I have is to have a script, that would take my
>> modulename or path name as parameter, and try to import it and then call
>> the main function of the imported module.
>>
>>
>> Not very elegant, but probably functional.
>>
>> Thanks in advance for any other suggestions / ideas.
>>
>
> I hope this helps
> http://stackoverflow.com/questions/3616952/how-to-properly-use-relative-or-absolute-imports-in-python-modules

It seems the safest bet seems to be to not use relative imports.

What I did in the end however is write a wrapper script, that takes 
another script as parameter, converts it's path name to a module name, 
imports it, adapts sys.path and calls main of the imported module.

Perhaps a little overkill, but most convenient, as the script can even 
adapt sys.path prior to importing other files if required.





>
>





More information about the Python-list mailing list