Ошибка импорта Python / Django os.path - PullRequest
3 голосов
/ 20 июля 2011

В настоящее время я работаю над Django-Project, который помимо прочего должен читать различные форматы файлов.Каждый формат имеет свой собственный скрипт чтения.Используемые форматы зависят от выбора, поэтому соответствующие скрипты импортируются во время выполнения моим admin_view.py.Это делается с помощью imp:

module = imp.load_source('lidardaten.datatypes.' + datatype, PATH + datatype + '.py')

Теперь моя проблема в том, что я получаю ImportError при попытке импортировать os-модуль в эти сценарии, говоря «Нет имени пути модуля».

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

У меня нет проблем с импортом os-модуля ни в admin_view.py, ни через интерпретатор.Также хорошо работает импорт других модулей в скриптах чтения - если эти модули не пытаются импортировать os.

Это из-за импорта скриптов с imp.load_source?Другие возможности?Любое предложение будет высоко ценится небоскреб!

1 Ответ

1 голос
/ 20 июля 2011

Вместо использования imp взгляните на магический метод __import__, который может импортировать модули без использования имен файлов. Ваш код будет выглядеть примерно так:

module_name = 'polly'
module = getattr(__import__('lidardaten.datatypes', globals(), locals(), [module_name]), module_name)
...