我正在尝试在IIS 7下的isapi-wsgi应用程序中使用cartopy。
我有很多应用程序使用isapi-wsgi,所以我100%确定我设置isapi-wsgi的方式是正确的。
我也在正常的Python控制台中正确运行了cartopy,所以这也没问题。
当代码到达时
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
IIS 7.5
安装了所有Python库的Python(x,y)2.7.6.0(32位)
来自http://www.lfd.uci.edu/~gohlke/pythonlibs/:
IIS中的我的应用程序池配置为允许32位应用程序。
我还使用“Dependency Walker”调查了geos_c.dll的依赖关系。它表明它取决于众所周知的“msvcr90.dll”和“msvcp90.dll”文件。我怀疑DLL加载失败,因为无法解析这些依赖项,但我确实安装了“MS Visual ... Redistributable”。即使将这些DLL复制到各种文件夹,如shapely,虚拟目录,PATH中的不同目录等也无法解决我的问题。
我真的被困在这里,不知道更进一步。有人有什么建议吗?
更新
根据@eryksun的建议,我尝试在IIS中加载msvc[r|p]90.dll
个文件。我使用了以下代码片段:
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
甚至出现弹出窗口。这似乎与this issue有关。有任何想法吗?我在哪里可以找到这个“版本B”DLL?