Python/Django 导入错误 os.path
我现在在做一个Django项目,这个项目需要读取不同的文件格式。每种格式都有自己专门的读取脚本。具体使用哪种格式取决于用户的选择,所以我在admin_view.py中动态导入相应的脚本。这是通过imp模块实现的:
module = imp.load_source('lidardaten.datatypes.' + datatype, PATH + datatype + '.py')
现在,我遇到的问题是,在这些脚本中尝试导入os模块时出现了ImportError,提示“没有名为path的模块”。
Environment:
Request Method: POST
Request URL: http://lidardaten/django/lidardata/admin/upload/measurement/add/
Django Version: 1.2.5
Python Version: 2.4.3
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'lidardata.upload']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/lib/python2.4/site-packages/django/core/handlers/base.py" in get_response
100. response = callback(request, *callback_args, **callback_kwargs)
File "/s1lidar/u1/mathias/www/lidardata/upload/admin_views.py" in add_measurement
127. module = imp.load_source('lidardaten.datatypes.' + datatype, PATH + datatype + '.py')
File "/s1lidar/u1/mathias/www/lidardata/datatypes/polly.py" in ?
1. import os
File "/usr/lib64/python2.4/os.py" in ?
133. from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
Exception Type: ImportError at /admin/upload/measurement/add/
Exception Value: No module named path
在admin_view.py中或者通过解释器导入os模块没有问题。而且在读取脚本中导入其他模块也没问题,只要那些模块不尝试导入os。
这是不是因为使用imp.load_source
导入脚本的原因呢?还有其他可能性吗?任何建议都非常感谢!
1 个回答
1
与其使用 imp
,不如看看这个神奇的方法 __import__
,它可以在不使用文件名的情况下导入模块。你的代码最终会像这样:
module_name = 'polly'
module = getattr(__import__('lidardaten.datatypes', globals(), locals(), [module_name]), module_name)