Импорт модуля SWIG Python завершается неудачно с Apache
Импорт модуля Python выдает исключение в Django, когда я запускаю с Apache. Тот же самый исходный код прекрасно работает с сервером разработки django. Я также могу импортировать модуль из командной строки. Модуль представляет собой библиотеку Python SWIG. Я исследовал подобные проблемы в сети, но ничего не помогло (прямая косая черта, настройка PYTHONPATH, проверка разрешений...).
Я понимаю, что в операторах печати в конце сообщения есть двойная косая черта в имени файла, но я понимаю (я могу ошибаться), что это нормально.
Вот 3 сценария, из которых один проваливается:
Из командной строки я могу выполнить следующее и все работает нормально:
import QuantLib
Используя сервер разработки django, я могу запустить следующий код на мой взгляд без ошибок:
from django.http import HttpResponse
import sys
import QuantLib
def home(request):
return HttpResponse("This is a test.")
Теперь, если я перехожу к apache с помощью следующего скрипта, я получаю следующую ошибку, используя то же представление, что и выше. Файл django_wsgi:
import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'tgVAR.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
** * ** * ОШИБКА В БРАУЗЕРЕ
ImportError at /
DLL load failed: The specified module could not be found.
Request Method: GET
Request URL: (here is the url)
Django Version: 1.4
Exception Type: ImportError
Exception Value: DLL load failed: The specified module could not be found.
Exception Location: D:\Program Files (x86)\Python27\lib\site-packages\QuantLib\QuantLib.py in swig_import_helper, line 29
Python Executable: D:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin\httpd.exe
Python Version: 2.7.2
Python Path:
['D:\\Program Files (x86)\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg',
'C:\\Windows\\system32\\python27.zip',
'D:\\Program Files (x86)\\Python27\\Lib',
'D:\\Program Files (x86)\\Python27\\DLLs',
'D:\\Program Files (x86)\\Python27\\Lib\\lib-tk',
'D:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2',
'D:\\Program Files (x86)\\Apache Software Foundation\\Apache2.2\\bin',
'D:\\Program Files (x86)\\Python27',
'D:\\Program Files (x86)\\Python27\\lib\\site-packages',
'D:\\Program Files (x86)\\Python27\\Lib\\site-packages\\QuantLib',
'D:\\Program Files (x86)\\Django-1.4',
'D:\\Home',
'D:\\Home\\tgVAR',
'c:/Home/test1/test1']
Server time: Sat, 25 Aug 2012 14:02:27 -0400
** * *** * КОД ИСТОЧНИКА, КОТОРЫЙ НЕ УКАЗАН D:\Program Files (x86)\Python27\lib\site-packages\QuantLib\QuantLib.py в swig_import_helper:
from sys import version_info
if version_info >= (2,6,0):
def swig_import_helper():
from os.path import dirname
import imp
fp = None
try:
fp, pathname, description = imp.find_module('_QuantLib', [dirname(__file__)])
except ImportError:
import _QuantLib
return _QuantLib
if fp is not None:
try:
#TG start
print '***********TG***************'
print fp
print pathname
print description
print '****************************'
#TG end
_mod = imp.load_module('_QuantLib', fp, pathname, description)
finally:
fp.close()
return _mod
_QuantLib = swig_import_helper()
del swig_import_helper
else:
import _QuantLib
del version_info
** * ** * *** * ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ В APACHE, КОГДА ИСКЛЮЧЕНО ИСКЛЮЧЕНИЕ:
Variable Value
fp <closed file 'D:\Program Files (x86)\Python27\lib\site-packages\QuantLib\_QuantLib.pyd', mode 'rb' at 0x0429C5A0>
imp <module 'imp' (built-in)>
dirname <function dirname at 0x018F29B0>
pathname 'D:\\Program Files (x86)\\Python27\\lib\\site-packages\\QuantLib\\_QuantLib.pyd'
description ('.pyd', 'rb', 3)
** * ** * *** * ВЫХОД ИЗ ПЕЧАТНЫХ ЗАЯВЛЕНИЙ В ИСТОЧНИКЕ КОДА ПРИ РАБОТЕ С APACHE
[Sat Aug 25 14:02:26 2012] [error] ***********TG***************
[Sat Aug 25 14:02:26 2012] [error] <open file 'D:\\Program Files (x86)\\Python27\\lib\\site-packages\\QuantLib\\_QuantLib.pyd', mode 'rb' at 0x0429C5A0>
[Sat Aug 25 14:02:26 2012] [error] D:\\Program Files (x86)\\Python27\\lib\\site-packages\\QuantLib\\_QuantLib.pyd
[Sat Aug 25 14:02:26 2012] [error] ('.pyd', 'rb', 3)
[Sat Aug 25 14:02:26 2012] [error] ****************************
** * ** * *** * ВЫХОД ИЗ ОТЧЕТОВ ПЕЧАТИ В ИСТОЧНИКЕ, КОГДА ВЫ ИМПОРТИРУЕТЕ ИЗ ПИТОНА ИНТЕРАКТИВНОГО ИНТЕРПРЕТАТОРА
***********TG***************
<open file 'D:\Program Files (x86)\Python27\Lib\site-packages\QuantLib\_QuantLib.pyd', mode 'rb' at 0x02879CD8>
D:\Program Files (x86)\Python27\Lib\site-packages\QuantLib\_QuantLib.pyd
('.pyd', 'rb', 3)
****************************
** * ** * *** * ВЫХОД ИЗ ПЕЧАТНЫХ ЗАЯВЛЕНИЙ В ИСТОЧНИКЕ, КОГДА РАБОТАЕТ СЕРВЕР ДЖАНГО РАЗРАБОТКА
***********TG***************
<open file 'D:\Program Files (x86)\Python27\Lib\site-packages\QuantLib\_QuantLib.pyd', mode 'rb' at 0x0312AAC8>
D:\Program Files (x86)\Python27\Lib\site-packages\QuantLib\_QuantLib.pyd
('.pyd', 'rb', 3)
****************************
1 ответ
Как и все SWIG-генерируемые модули, QuantLib не является чистым модулем Python, но зависит от базовой разделяемой библиотеки C++ (она должна называться libQuantLib.so). Это должно быть загружено Apache; например, убедитесь, что он находится в PATH, что ld его кэшировал или что у него есть необходимые разрешения.