2016-08-03 10 views
3

私はDjangoアプリケーション内にpython-ldapを使用しており、いつもうまく機能しています。私は現在、私のプロジェクトで多くのdepsをアップグレードする過程にあり、アルパインとドッカーの最新のdjangoになりたいと思っています。エラーを避けるためにモジュールを事前インポートする必要があります

./manage shell(または他の管理コマンド)を実行しようとすると、突然このエラーが発生し始めました。

... 
    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 

python -c 'import _ldap'上記のエラーと罰金、./manage.py shell -c 'import _ldap' barfsに動作します。

私は気づいた、私は非常に早く、import ldapエラーがなくなった。

長い編集とデバッグを経て、https://github.com/django/django/blob/1.10/django/apps/config.py#L107の前にif entry == 'django.contrib.postgres': import ldapを追加すると、djangoはimport ldapになります。 L107上の module.default_app_configdjango.contrib.postgres.apps.PostgresConfighttps://github.com/django/django/blob/1.10/django/contrib/postgres/apps.py#L10)です。

明らかに、postgresインポートは何かをしています。しかし、それはLDAPで何をしていますか?どこかで名前の衝突がありますか?どうすればさらにデバッグできますか?

「あなたのsettings.pyの上にldapをインポートする」というソリューションは欲しくないです。これはバグであり修正する必要があります。

  • ジャンゴ:1.10
  • アルパイン:3.4
  • のPython:2.7.12
  • psycopg2:2.6.2
  • のlibpq:9.5.3-R1
+1

この上の任意のアップデート! –

+0

いいえ。まだ設定ファイルの上に 'import ldap'があります。追加するデバッグ情報がありますか? – xeor

+0

本当に、私はあなたが私に与えたものを取って、これをやった:https://gist.github.com/kingbuzzman/f32818da543bc2586d52ec52de8fa394それ以外のもの:/ PS、スニペットのおかげで:P –

答えて

0

私が働いていますアルパイン:3.4ドッカー画像。

tarballのpython-ldapをインストールする必要があります。

$ 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 

あなたが見ることができるように、私たちはlibslbersasl2sslcryptoを追加します。

その後、python-ldapインストール:

# python setup.py build 
# python setup.py install 

出典:

  • のpython-LDAP FAQ
関連する問題