Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要预导入模块以避免错误_Python_Django_Python Ldap - Fatal编程技术网

Python 需要预导入模块以避免错误

Python 需要预导入模块以避免错误,python,django,python-ldap,Python,Django,Python Ldap,我在我的Django应用程序中使用pythonlap,这一直都很好。我目前正在升级我的项目中的许多DEP,希望最终能在alpine和docker上得到最新的django 尝试执行/manageshell(或任何其他管理命令)时,突然出现此错误 ... File "/usr/lib/python2.7/site-packages/ldap/__init__.py", line 22, in <module> import _ldap ImportError: Error r

我在我的
Django
应用程序中使用
pythonlap
,这一直都很好。我目前正在升级我的项目中的许多DEP,希望最终能在alpine和docker上得到最新的django

尝试执行
/manageshell
(或任何其他管理命令)时,突然出现此错误

...
  File "/usr/lib/python2.7/site-packages/ldap/__init__.py", line 22, in <module>
    import _ldap
ImportError: Error relocating /usr/lib/python2.7/site-packages/_ldap.so: ber_free: symbol not found
。。。
文件“/usr/lib/python2.7/site packages/ldap/_init__.py”,第22行,在
导入ldap
ImportError:重新定位/usr/lib/python2.7/site-packages//u ldap.so:ber\u free:未找到符号时出错
python-c'import\u ldap'
工作正常,
/manage.py shell-c'import\u ldap'
会出现上述错误

在闲逛时,我注意到如果我很早导入ldap,错误就会消失

经过长时间的编辑和调试,我发现如果我在前面添加
if entry='django.contrib.postgres':import ldap
,django将能够
导入ldap
。 L107上的
module.default\u app\u config
django.contrib.postgres.apps.PostgresConfig
()

显然,postgres import正在做一些事情。但它对ldap做了什么?某处有名字冲突吗?如何进一步调试

我不想要“只需在
设置.py
上导入ldap”的解决方案。这是一个bug,应该修复

  • Django:1.10
  • 阿尔卑斯山:3.4
  • Python:2.7.12
  • psycopg2:2.6.2
  • libpq:9.5.3-r1

我正在制作Alpine:3.4 Docker图像

您需要从tarball安装
pythonldap

$ wget https://pypi.python.org/packages/8b/f3/8122b9d8999a67293a5a236f4b9eda009dce76835bb854fb848b1133dbe0/python-ldap-2.4.39.tar.gz
$ tar -xvf python-ldap-2.4.39.tag.gz
$ cd python-ldap-2.4.39
将此修补程序应用于
setup.cfg

--- setup.cfg
+++ setup.cfg.patch
@@ -2,9 +2,9 @@
 library_dirs = /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
 include_dirs = /usr/include /usr/include/sasl /usr/local/include /usr/local/include/sasl
 defines = HAVE_SASL HAVE_TLS HAVE_LIBLDAP_R
-extra_compile_args =
+extra_compile_args = -g
 extra_objects =
-libs = ldap_r
+libs = ldap_r lber sasl2 ssl crypto

 [install]
 compile = 1
如您所见,我们只需将
lber
sasl2
ssl
crypto
添加到
libs

然后,安装
python ldap

# python setup.py build
# python setup.py install
资料来源:

  • python ldap

我碰巧遇到了这个问题,将python ldap升级到最新版本(3.0.0)解决了这个问题,因为它是另一个答案中描述的修复程序。

有任何更新吗?!不在我的设置文件顶部仍然有一个
import ldap
。你还有更多的调试信息要添加吗?没有,我拿了你给我的东西,做了这个:除此之外没有:/PS,谢谢你的代码片段:P