Я использую python-ldap
внутри моего приложения Django
и который всегда работал нормально. В настоящее время я нахожусь в процессе обновления большого количества депо в моем проекте, перемещая вещи вокруг, желая закончить с последним django на alpine и docker.Нужно предварительно импортировать модуль, чтобы избежать ошибки
Попытка выполнить ./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
очень рано, ошибка исчезла.
После долгого пути редактирования и отладки я обнаружил, что если я добавлю if entry == 'django.contrib.postgres': import ldap
до https://github.com/django/django/blob/1.10/django/apps/config.py#L107, django сможет import ldap
. module.default_app_config
на L107 - django.contrib.postgres.apps.PostgresConfig
(https://github.com/django/django/blob/1.10/django/contrib/postgres/apps.py#L10).
Так что, очевидно, импорт postgres делает что-то. Но что он делает с ldap? Есть где-то столкновение имен? Как я могу отлаживать дальше?
Я не хочу, чтобы решение «просто импортировать ldap поверх settings.py
». Это ошибка, и она должна быть исправлена.
- Джанго: 1,10
- Alpine: 3,4
- Python: 2.7.12
- psycopg2: 2.6.2
- libpq: 9.5.3-r1
Любое изменение на это ?! –
Нет. У меня все еще есть «import ldap» поверх моего файла настроек. У вас есть дополнительная информация об отладке? – xeor
Не совсем, я взял то, что вы мне дали, и сделал это: https://gist.github.com/kingbuzzman/f32818da543bc2586d52ec52de8fa394 кроме этого нет:/PS, спасибо за фрагмент: P –