在使用IIS为Django和django-mssql提供服务来处理事务时,我在将Django项目连接到SQL Server 2008时遇到问题。我正在使用IIS 7和64 bit ActivePython 2.7。
以下是我安装的软件包列表:
Django==1.4.5
distribute==0.6.19
django-mssql==1.2
pypm==1.3.4
pythonselect==1.3
pywin32==214
virtualenv==1.6.1
wsgiref==0.1.2
这是堆栈跟踪的最后一位:
File "C:\Python27\lib\site-packages\django\db\__init__.py", line 40, in
backend = load_backend(connection.settings_dict['ENGINE'])
File "C:\Python27\lib\site-packages\django\db\__init__.py", line 34, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Python27\lib\site-packages\django\db\utils.py", line 92, in __getitem__
backend = load_backend(db['ENGINE'])
File "C:\Python27\lib\site-packages\django\db\utils.py", line 51, in load_backend
raise ImproperlyConfigured(error_msg)
django.core.exceptions.ImproperlyConfigured: 'sqlserver_ado' isn't an available database backend.
Try using django.db.backends.sqlserver_ado instead.
Error was: DLL load failed: The specified module could not be found.
如果我将sqlserver_ado
文件夹添加到C:\Python27\Lib\site-packages\django\db\backends
并将settings.py
中的数据库设置从'ENGINE': 'sqlserver_ado',
更改为'ENGINE': 'django.db.backends.sqlserver_ado',
,那么我的堆栈会略有不同跟踪。
File "C:\Python27\lib\site-packages\django\db\backends\sqlserver_ado\base.py", line 6, in
import dbapi as Database
File "C:\Python27\lib\site-packages\django\db\backends\sqlserver_ado\dbapi.py", line 49, in
import pythoncom
File "C:\Python27\lib\site-packages\pythoncom.py", line 2, in
import pywintypes
File "C:\Python27\lib\site-packages\win32\lib\pywintypes.py", line 124, in
__import_pywin32_system_module__("pywintypes", globals())
File "C:\Python27\lib\site-packages\win32\lib\pywintypes.py", line 64, in __import_pywin32_system_module__
import _win32sysloader
ImportError: DLL load failed: The specified module could not be found.
如果我连接到sqlite数据库而不是SQL Server,应用程序工作正常 如果我使用开发服务器运行项目,连接到SQL Server工作正常 所以似乎问题是IIS / PyISAPIe和django_mssql的组合。
其他几个问题也提到了类似的问题。这些都是通过某种方式在系统路径上获取python dll来解决的。我试过了(通过检查路径并将文件复制到c:\python2.7
,但我得到了同样的错误。
对于最后一点信息,这里是开发服务器版本和IIS / PyISAPIe版本的sys.path
。
发展(工作):
C:\Users\Administrator\Desktop\django test C:\Python27\python27.zip C:\Python27\DLLs C:\Python27\lib C:\Python27\lib\plat-win C:\Python27\lib\lib-tk C:\Python27 C:\Users\Administrator\AppData\Roaming\Python\Python27\site-packages C:\Python27\lib\site-packages C:\Python27\lib\site-packages\win32 C:\Python27\lib\site-packages\win32\lib C:\Python27\lib\site-packages\Pythonwin C:\Python27\lib\site-packages\setuptools-0.6c11-py2.7.egg-info
IIS(失败):
C:\PyISAPIe C:\Windows\system32\python27.zip C:\Python27\Lib C:\Python27\DLLs C:\Python27\Lib\lib-tk c:\windows\system32\inetsrv C:\Python27 C:\Python27\lib\site-packages C:\Python27\lib\site-packages\win32 C:\Python27\lib\site-packages\win32\lib C:\Python27\lib\site-packages\Pythonwin C:\Python27\lib\site-packages\setuptools-0.6c11-py2.7.egg-info c:\inetpub\PyApp
任何有关从何处出发的提示或建议都将不胜感激。我将尝试使用普通(即非活动)Python,看看是否会产生影响。
答案 0 :(得分:1)
从头开始安装64位python并遵循建议here的工作。问题一定是Active Python的一些愚蠢行为。
我注意到有一件事可能会有所帮助。
C:\Python27\Lib\site-packages
包含一个名为pywin32_system32
的文件夹,其中包含需要复制到C:\Python27
的可执行文件解决问题。我还注意到,两种安装方法(win32
,win32com
和win32comext
)的目录都包含略有不同的文件。
我希望将来可以为别人带来一些痛苦。