在 Windows 10 上安装 django-ldapdb
Installing django-ldapdb on Windows 10
我正在尝试扩展现有的 LDAP 数据库以允许用户注册 WLAN 设备。为此,我想利用 Django 框架。 django-ldapdb
是一个很有前途的插件,我想试试。
主要问题
问题是在我的 Windows 10 机器上将此插件安装到 运行。我正在使用 Python 3.6.1 并希望在 JetBrain 的 PyCharm.
中进行开发
通过 pip install django-ldapdb
安装插件会导致错误(省略号表示遗漏日志):
(...)
running build_ext
building '_ldap' extension
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
creating build\temp.win32-3.6\Release\Modules
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=2.4.28 -IModules -I/usr/include -I/usr/include/sasl -I/usr/local/include -I/usr/local/include/sasl "-Ic:\program files (x86)\python36-32\include" "-Ic:\program files (x86)\python36-32\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\shared" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\winrt" /TcModules/LDAPObject.c /Fobuild\temp.win32-3.6\Release\Modules/LDAPObject.obj
LDAPObject.c
c:\users\j0hj0h\appdata\local\temp\pip-build-j0vdz6mm\pyldap\modules\errors.h(8): fatal error C1083: Cannot open include file: 'lber.h': No such file or directory
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe' failed with exit status 2
----------------------------------------
Command ""c:\program files (x86)\python36-32\python.exe" -u -c "import setuptools, tokenize;__file__='C:\Users\j0hj0h\AppData\Local\Temp\pip-build-j0vdz6mm\pyldap\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\j0hj0h\AppData\Local\Temp\pip-n_a_dcd5-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\j0hj0h\AppData\Local\Temp\pip-build-j0vdz6mm\pyldap\
plugin's page 提到了对 LDAP 包的依赖性。因为我使用 Windows,所以我不知道如何安装它们。
进一步调查
经过艰苦的搜索和大量的实验,我找到了一种产生不同错误的方法,我认为这是一个较小的问题。
我尝试安装 Python LDAP 软件包 (pip install python-ldap
),但出现语法错误:
Collecting python-ldap
Using cached python-ldap-2.4.32.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\J0hj0h\AppData\Local\Temp\pip-build-snzefz4h\python-ldap\setup.py", line 53
print name + ': ' + cfg.get('_ldap', name)
^
SyntaxError: invalid syntax
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\J0hj0h\AppData\Local\Temp\pip-build-snzefz4h\python-ldap\
尝试安装替代包 (pip install pyldap
) 会导致与尝试安装相同的错误 django-ldapdb
:
(...)
running build_ext
building '_ldap' extension
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
creating build\temp.win32-3.6\Release\Modules
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=2.4.28 -IModules -I/usr/include -I/usr/include/sasl -I/usr/local/include -I/usr/local/include/sasl "-Ic:\program files (x86)\python36-32\include" "-Ic:\program files (x86)\python36-32\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\shared" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\winrt" /TcModules/LDAPObject.c /Fobuild\temp.win32-3.6\Release\Modules/LDAPObject.obj
LDAPObject.c
c:\users\j0hj0h\appdata\local\temp\pip-build-rr10feu9\pyldap\modules\errors.h(8): fatal error C1083: Cannot open include file: 'lber.h': No such file or directory
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe' failed with exit status 2
----------------------------------------
Command ""c:\program files (x86)\python36-32\python.exe" -u -c "import setuptools, tokenize;__file__='C:\Users\J0hj0h\AppData\Local\Temp\pip-build-rr10feu9\pyldap\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\J0hj0h\AppData\Local\Temp\pip-4vbw823_-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\J0hj0h\AppData\Local\Temp\pip-build-rr10feu9\pyldap\
我对此了解不多,但读到可以将 some site. Both wheels for python-ldap
中的软件包作为轮子安装失败并出现错误:
python_ldap-2.4.32-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
wheels for pyldap
几乎相同。我尝试了三个最新版本(pyldap‑2.4.28‑cp35‑cp35m‑win_amd64.whl
、pyldap‑2.4.28‑cp36‑cp36m‑win32.whl
、pyldap‑2.4.28‑cp36‑cp36m‑win_amd64.whl
),其中只有 32 位版本(pyldap‑2.4.28‑cp36‑cp36m‑win_amd64.whl
)安装成功。
然后我就可以安装 Django 插件了 (pip install django-ldapdb
)。在Django项目中,我启动了一个名为ldap
的应用程序并根据插件的文档修改了settings.py
:
DATABASES = {
'ldap': {
'ENGINE': 'ldapdb.backends.ldap',
'NAME': 'ldap://localhost',
'USER': 'cn=admin,dc=example,dc=org',
'PASSWORD': 'admin',
},
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DATABASE_ROUTERS = ['ldapdb.router.Router']
如果我知道 运行 带有 PyCharm 的项目,错误将更改为模块 ldap.filter
丢失:
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x03A1DBB8>
Traceback (most recent call last):
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\commands\runserver.py", line 125, in inner_run
self.check(display_num_errors=True)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\base.py", line 346, in _run_checks
return checks.run_checks(**kwargs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\checks\model_checks.py", line 30, in check_all_models
errors.extend(model.check(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 1282, in check
errors.extend(cls._check_fields(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 1357, in _check_fields
errors.extend(field.check(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\fields\__init__.py", line 909, in check
errors = super(AutoField, self).check(**kwargs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\fields\__init__.py", line 219, in check
errors.extend(self._check_backend_specific_checks(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\fields\__init__.py", line 321, in _check_backend_specific_checks
if router.allow_migrate(db, app_label, model_name=self.model._meta.model_name):
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\utils.py", line 293, in allow_migrate
for router in self.routers:
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\utils\functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\utils.py", line 251, in routers
router = import_string(r)()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\utils\module_loading.py", line 20, in import_string
module = import_module(module_path)
File "C:\Program Files (x86)\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 936, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "C:\Program Files (x86)\Python36-32\lib\site-packages\ldapdb\__init__.py", line 8, in <module>
import ldap.filter
ModuleNotFoundError: No module named 'ldap.filter'
安装 OpenLDAP for Windows 没有解决问题。
建议?
我快要疯了,因为我不知道如何解决这个问题,也不知道是什么原因造成的。你知道原因是什么以及如何让 django-ldapdb
在 Windows 上工作吗?
库不适用于 Windows。但是,使用 Docker 可以 运行 Debian 容器并安装它们。缺少的库是:
libldap2-dev
libsasl2-dev
安装这些可以安装 django-ldapdb
。
如果你想使用Python3
,你必须安装pyldap
。 python-ldap
不支持 Python3.
所以首先,下载pyldap‑2.4.37‑cp36‑cp36m‑win32.whl并使用命令
安装
pip install pyldap‑2.4.37‑cp36‑cp36m‑win32.whl
然后你也可以安装django-ldapdb
:
pip install django-ldapdb
我正在尝试扩展现有的 LDAP 数据库以允许用户注册 WLAN 设备。为此,我想利用 Django 框架。 django-ldapdb
是一个很有前途的插件,我想试试。
主要问题
问题是在我的 Windows 10 机器上将此插件安装到 运行。我正在使用 Python 3.6.1 并希望在 JetBrain 的 PyCharm.
中进行开发
通过 pip install django-ldapdb
安装插件会导致错误(省略号表示遗漏日志):
(...)
running build_ext
building '_ldap' extension
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
creating build\temp.win32-3.6\Release\Modules
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=2.4.28 -IModules -I/usr/include -I/usr/include/sasl -I/usr/local/include -I/usr/local/include/sasl "-Ic:\program files (x86)\python36-32\include" "-Ic:\program files (x86)\python36-32\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\shared" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\winrt" /TcModules/LDAPObject.c /Fobuild\temp.win32-3.6\Release\Modules/LDAPObject.obj
LDAPObject.c
c:\users\j0hj0h\appdata\local\temp\pip-build-j0vdz6mm\pyldap\modules\errors.h(8): fatal error C1083: Cannot open include file: 'lber.h': No such file or directory
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe' failed with exit status 2
----------------------------------------
Command ""c:\program files (x86)\python36-32\python.exe" -u -c "import setuptools, tokenize;__file__='C:\Users\j0hj0h\AppData\Local\Temp\pip-build-j0vdz6mm\pyldap\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\j0hj0h\AppData\Local\Temp\pip-n_a_dcd5-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\j0hj0h\AppData\Local\Temp\pip-build-j0vdz6mm\pyldap\
plugin's page 提到了对 LDAP 包的依赖性。因为我使用 Windows,所以我不知道如何安装它们。
进一步调查
经过艰苦的搜索和大量的实验,我找到了一种产生不同错误的方法,我认为这是一个较小的问题。
我尝试安装 Python LDAP 软件包 (pip install python-ldap
),但出现语法错误:
Collecting python-ldap
Using cached python-ldap-2.4.32.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\J0hj0h\AppData\Local\Temp\pip-build-snzefz4h\python-ldap\setup.py", line 53
print name + ': ' + cfg.get('_ldap', name)
^
SyntaxError: invalid syntax
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\J0hj0h\AppData\Local\Temp\pip-build-snzefz4h\python-ldap\
尝试安装替代包 (pip install pyldap
) 会导致与尝试安装相同的错误 django-ldapdb
:
(...)
running build_ext
building '_ldap' extension
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
creating build\temp.win32-3.6\Release\Modules
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DHAVE_SASL -DHAVE_TLS -DHAVE_LIBLDAP_R -DHAVE_LIBLDAP_R -DLDAPMODULE_VERSION=2.4.28 -IModules -I/usr/include -I/usr/include/sasl -I/usr/local/include -I/usr/local/include/sasl "-Ic:\program files (x86)\python36-32\include" "-Ic:\program files (x86)\python36-32\include" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\shared" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\um" "-IC:\Program Files (x86)\Windows Kits\include.0.10240.0\winrt" /TcModules/LDAPObject.c /Fobuild\temp.win32-3.6\Release\Modules/LDAPObject.obj
LDAPObject.c
c:\users\j0hj0h\appdata\local\temp\pip-build-rr10feu9\pyldap\modules\errors.h(8): fatal error C1083: Cannot open include file: 'lber.h': No such file or directory
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe' failed with exit status 2
----------------------------------------
Command ""c:\program files (x86)\python36-32\python.exe" -u -c "import setuptools, tokenize;__file__='C:\Users\J0hj0h\AppData\Local\Temp\pip-build-rr10feu9\pyldap\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\J0hj0h\AppData\Local\Temp\pip-4vbw823_-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\J0hj0h\AppData\Local\Temp\pip-build-rr10feu9\pyldap\
我对此了解不多,但读到可以将 some site. Both wheels for python-ldap
中的软件包作为轮子安装失败并出现错误:
python_ldap-2.4.32-cp27-cp27m-win_amd64.whl is not a supported wheel on this platform.
wheels for pyldap
几乎相同。我尝试了三个最新版本(pyldap‑2.4.28‑cp35‑cp35m‑win_amd64.whl
、pyldap‑2.4.28‑cp36‑cp36m‑win32.whl
、pyldap‑2.4.28‑cp36‑cp36m‑win_amd64.whl
),其中只有 32 位版本(pyldap‑2.4.28‑cp36‑cp36m‑win_amd64.whl
)安装成功。
然后我就可以安装 Django 插件了 (pip install django-ldapdb
)。在Django项目中,我启动了一个名为ldap
的应用程序并根据插件的文档修改了settings.py
:
DATABASES = {
'ldap': {
'ENGINE': 'ldapdb.backends.ldap',
'NAME': 'ldap://localhost',
'USER': 'cn=admin,dc=example,dc=org',
'PASSWORD': 'admin',
},
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DATABASE_ROUTERS = ['ldapdb.router.Router']
如果我知道 运行 带有 PyCharm 的项目,错误将更改为模块 ldap.filter
丢失:
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x03A1DBB8>
Traceback (most recent call last):
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\commands\runserver.py", line 125, in inner_run
self.check(display_num_errors=True)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\base.py", line 346, in _run_checks
return checks.run_checks(**kwargs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\checks\model_checks.py", line 30, in check_all_models
errors.extend(model.check(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 1282, in check
errors.extend(cls._check_fields(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\base.py", line 1357, in _check_fields
errors.extend(field.check(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\fields\__init__.py", line 909, in check
errors = super(AutoField, self).check(**kwargs)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\fields\__init__.py", line 219, in check
errors.extend(self._check_backend_specific_checks(**kwargs))
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\models\fields\__init__.py", line 321, in _check_backend_specific_checks
if router.allow_migrate(db, app_label, model_name=self.model._meta.model_name):
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\utils.py", line 293, in allow_migrate
for router in self.routers:
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\utils\functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\utils.py", line 251, in routers
router = import_string(r)()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\utils\module_loading.py", line 20, in import_string
module = import_module(module_path)
File "C:\Program Files (x86)\Python36-32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 936, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "C:\Program Files (x86)\Python36-32\lib\site-packages\ldapdb\__init__.py", line 8, in <module>
import ldap.filter
ModuleNotFoundError: No module named 'ldap.filter'
安装 OpenLDAP for Windows 没有解决问题。
建议?
我快要疯了,因为我不知道如何解决这个问题,也不知道是什么原因造成的。你知道原因是什么以及如何让 django-ldapdb
在 Windows 上工作吗?
库不适用于 Windows。但是,使用 Docker 可以 运行 Debian 容器并安装它们。缺少的库是:
libldap2-dev
libsasl2-dev
安装这些可以安装 django-ldapdb
。
如果你想使用Python3
,你必须安装pyldap
。 python-ldap
不支持 Python3.
所以首先,下载pyldap‑2.4.37‑cp36‑cp36m‑win32.whl并使用命令
安装pip install pyldap‑2.4.37‑cp36‑cp36m‑win32.whl
然后你也可以安装django-ldapdb
:
pip install django-ldapdb