Я пытаюсь использовать cartopy в приложении isapi-wsgi под IIS 7.
У меня много приложений, работающих с isapi-wsgi, поэтому я на 100% уверен, что правильно настроил isapi-wsgi.
У меня также правильно работает cartopy в обычной Python-консоли, так что это тоже не проблема.
Когда код приходит к
import cartopy.io.shapereader
это терпит неудачу.
Соответствующая часть трассировки
Traceback (most recent call last):
...
File "C:\Python27\lib\site-packages\cartopy\__init__.py", line 23, in <module>
import shapely.speedups
File "C:\Python27\lib\site-packages\shapely\speedups\__init__.py", line 3, in <module>
from shapely.geometry import linestring, polygon
File "C:\Python27\lib\site-packages\shapely\geometry\__init__.py", line 4, in <module>
from .base import CAP_STYLE, JOIN_STYLE
File "C:\Python27\lib\site-packages\shapely\geometry\base.py", line 9, in <module>
from shapely.coords import CoordinateSequence
File "C:\Python27\lib\site-packages\shapely\coords.py", line 8, in <module>
from shapely.geos import lgeos
File "C:\Python27\lib\site-packages\shapely\geos.py", line 81, in <module>
_lgeos = CDLL("geos_c.dll")
File "C:\Python27\Lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
Как упоминалось ранее, этот импорт завершается ошибкой только в IIS и isapi_wsgi.
Моя конфигурация:
Windows Server 2008 R2
ИИС 7.5
Python(x,y) 2.7.6.0 со всеми установленными Python-библиотеками (32 бита)
Из http://www.lfd.uci.edu/~gohlke/pythonlibs/:
- Cartopy 0.10
- Стройный 1.3
- пышп 1.2
- все с правильной разрядностью и версией Python
Мой пул приложений в IIS настроен на разрешение 32-битных приложений.
Я также исследовал зависимости geos_c.dll с помощью «Dependency Walker». Это показывает, что это зависит от известных файлов «msvcr90.dll» и «msvcp90.dll». Я подозревал, что загрузка DLL не удалась, потому что эти зависимости не удалось разрешить, но на самом деле у меня установлен «MS Visual... Redistributable». Даже копирование этих DLL в разные папки, например shapely, виртуальный каталог, разные каталоги в PATH и т. д., не решило мою проблему.
Я действительно застрял здесь и ничего не знаю. У кого-нибудь есть совет?
Обновить
По предложению @eryksun я попытался загрузить файлы msvc[r|p]90.dll
в IIS. Я использовал следующий фрагмент кода:
sio = StringIO()
for dll_name in ["msvcp90.dll", "msvcr90.dll"]:
try:
print >> sio, "Loading {} ...".format(dll_name),
handle = ctypes.CDLL(dll_name)
print >> sio, "successful, {}".format(str(handle))
except Exception, e:
print >> sio, "failed, {}, {}".format(str(type(e)), str(e))
И это дает мне
Loading msvcp90.dll ... failed, <type 'exceptions.WindowsError'>, [Error 126] The specified module could not be found
Loading msvcr90.dll ... failed, <type 'exceptions.WindowsError'>, [Error 126] The specified module could not be found
Так что это действительно должно быть корнем всех зол в данном случае. В обычном интерпретаторе оба вызова выполняются успешно.
Обновление 2
Интересно, что когда я ищу подходящие (32-битные) файлы msvc[p|r]90.dll
на своей машине и копирую их в рабочий каталог моего процесса isapi-wsgi, я получаю совершенно другую ошибку:
Loading msvcp90.dll ... failed, <type 'exceptions.WindowsError'>, [Error 1114] A dynamic link library (DLL) initialization routine failed
Loading msvcr90.dll ... failed, <type 'exceptions.WindowsError'>, [Error 1114] A dynamic link library (DLL) initialization routine failed
и даже появляется всплывающее окно. Похоже, это связано с этой проблемой. Любые идеи? Где я могу найти эту DLL "версии B"?
geos_c.dll
, например. сmt.exe -manifest geos_c.dll.MANIFEST -outputresource:geos_c.dll;2
, где манифест<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> </assembly>
- person cgohlke   schedule 17.04.2014