2016-06-15 3 views
0

Я работаю на CentOS 6,5/Python2.7.10/Django/MySQL, я получаю следующее сообщение об ошибке при попытке запуска:Джанго ошибка загрузки модуля MySQLdb неопределенный символ: _ZTVN10__cxxabiv117__class_type_infoE

python manage.py check 

Ошибка:

Traceback (most recent call last): 
    File "../manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 327, in execute 
    django.setup() 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
    File "/usr/local/python2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/usr/ez_sh/site/ettwit/kindergarten/models.py", line 14, in <module> 
    class Kindergarten(models.Model): 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/models/base.py", line 108, in __new__ 
    new_class.add_to_class('_meta', Options(meta, app_label)) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/models/base.py", line 307, in add_to_class 
    value.contribute_to_class(cls, name) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/models/options.py", line 263, in contribute_to_class 
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/__init__.py", line 36, in __getattr__ 
    return getattr(connections[DEFAULT_DB_ALIAS], item) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/utils.py", line 212, in __getitem__ 
    backend = load_backend(db['ENGINE']) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/utils.py", line 116, in load_backend 
    return import_module('%s.base' % backend_name) 
    File "/usr/local/python2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/usr/local/python2.7/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 28, in <module> 
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) 
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: /usr/local/python2.7/lib/python2.7/site-packages/_mysql.so: undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE 

Я использовал pip install mysqlclient.

+0

Проверьте, что ваша база данных правильно настроена в settings.py - http://www.marinamele.com/taskbuster-django-tutorial/install-and-configure-mysql-for-django – dmitryro

+0

@dmitryro Я думаю, что конфигурация DATABASE в settings.py в порядке, потому что проект отлично работает на моей Mac OS X, но идет ошибка в centos. –

+0

Попробуйте yum install MySQL-python и yum install mysql-devel – dmitryro

ответ

0

Я застрял в этой проблеме почти целый день, теперь я решил проблему. Во-первых, не устанавливайте mysqlclient через pip install mysqlclient, вы должны установить его из источника (скачать here).

Тогда:

tar -zxvf mysqlclient-1.3.7.tar.gz 
cd mysqlclient-1.3.7 
python setup.py build 

теперь самый важный шаг, используйте g++ перекомпиляции _mysql.so:

g++ -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o \ 
    -L/usr/lib64 -lmysqlclient_r -lpthread -lm -lrt -ldl -o build/linux-x86_64-2.7/_mysql.so 

Наконец:

python setup.py install 

и проверить, есть также проблема, и мой работает нормально:

python -c "import MySQLdb" 
or python manage.py check 

Честно говоря, я не знаю, почему возникает ошибка. Если у вас есть какие-либо идеи, пожалуйста, скажите мне.

+0

Это, пожалуй, самый простой способ следовать по пути установки всего на RHEL (Fedora, RedHat, CentOS), используя yum и rpm, а не строить из исходного кода, поэтому по стандартным путям - 1. Упорядочение «Разработка Инструменты ", включая g ++ и другие библиотеки, 2. Установка MySQL 5.5 или 5.6 с использованием yum и, наконец, установка связанных с python-devel и python-mysql модулей с помощью yum - очевидно, что по мере того, как вы строили исходный код, некоторые библиотеки все еще отсутствуют, поэтому yum на RHEL безопаснее - построение из источника предполагает осознание того, что необходимые флаги активны. – dmitryro

+0

Чтобы установить средства разработки, используйте yum groupinstall -y 'tools tools' – dmitryro

+0

http://stackoverflow.com/questions/23541205/cant-install-python-dev-on-centos-6-5 - с поправками, специфичными для вашей версии python и centos – dmitryro

Смежные вопросы