Импорт модуля 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 его кэшировал или что у него есть необходимые разрешения.

Другие вопросы по тегам