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.









--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to