By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,818 Members | 1,223 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,818 IT Pros & Developers. It's quick & easy.

Load objects using __import__

P: n/a
I load objects from a file (to django framework _but it's a python
question_).

1) Before I used this
from project.I18n.models import *

And to load the object
c1 = Country(name="Afghanistan")

But the problem is that there is to edit 'project' manually.

2) So I setup the environment and import the module:
project_directory = os.path.abspath('')
project_name = os.path.basename(project_directory)
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % project_name
sys.path.append(os.path.dirname(project_directory) )
module = __import__('%s.I18n.models' % (project_name), {}, {},
[''])
sys.path.pop()

It's all correct until here and to checking it I run:
print i18n_module
<module 'project.I18n.models' from
'/home/lala/django/project/I18n/models.pyc'>

print i18n_module.Country
<class 'project.I18n.models.Country'>

But when I load the object I get
SyntaxError: invalid syntax

c1 = <module 'project.I18n.models' from
'/home/lala/django/project/I18n/models.pyc'>.Country(name="Afghanistan")

Any idea?

Nov 21 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a

MindClass wrote:
But when I load the object I get
SyntaxError: invalid syntax

c1 = <module 'project.I18n.models' from
'/home/lala/django/project/I18n/models.pyc'>.Country(name="Afghanistan")
It looks like you're running generated code somewhere, but passing the
module itself rather than the name of the module to the code generator
by mistake. Perhaps you're execing some code that you pass the module
name to? Something like this?

exec 'c1 = %s.Country(name="Afgahanstan")' % module_name

You seem to be erroneously using the module itself, not the module
name.

That's about all I can help without more information.
P.S. if you are doing that, consider using getattr instead of exec.

c1 = getattr(module,Country)(name="Afgansitan")
Carl Banks

Nov 21 '06 #2

P: n/a
Indeed before reading your message I solved it doing:

model_name = Country
mod = eval('i18n_module.%s' % model_name)
c1 = mod(name="Afghanistan")
exec c1

but I'll use getattr as you say. Thanks

Carl Banks ha escrito:
MindClass wrote:
But when I load the object I get
SyntaxError: invalid syntax

c1 = <module 'project.I18n.models' from
'/home/lala/django/project/I18n/models.pyc'>.Country(name="Afghanistan")

It looks like you're running generated code somewhere, but passing the
module itself rather than the name of the module to the code generator
by mistake. Perhaps you're execing some code that you pass the module
name to? Something like this?

exec 'c1 = %s.Country(name="Afgahanstan")' % module_name

You seem to be erroneously using the module itself, not the module
name.

That's about all I can help without more information.
P.S. if you are doing that, consider using getattr instead of exec.

c1 = getattr(module,Country)(name="Afgansitan")
Carl Banks
Nov 21 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.