EN

Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).

Copying for private and non-public usage is allowed.

DE

Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Das private Kopieren und Benutzen ist natürlich erlaubt.

SeaFile: mySQL fehlt: ModuleNotFoundError: No module named 'MySQLdb'

Wenn man bei einer frischen SeaFile Installation (mit mySQL) den seaHub Dienst das erste Mal starten möchten, dann antwortet einem (auf einem frisch aufgesetzten Server) gerne diese Meldung:

./seahub.sh start
LC_ALL is not set in ENV, set to en_US.UTF-8
./seahub.sh: Zeile 210: Warnung: setlocale: LC_ALL: Kann die Locale nicht ändern (en_US.UTF-8): Datei oder Verzeichnis nicht gefunden
Starting seahub at port 8000 ...
Error:Seahub failed to start.
Please try to run "./seahub.sh start" again

OK, den Fehler mit "Kann die Locale nicht ändern (en_US.UTF-8): Datei oder Verzeichnis nicht gefunden" können wir mit der bereits bestehenden Anleitung (Link) schnell lösen. Trotzdem startet der seaHub Service nicht:

./seahub.sh start
LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub at port 8000 ...
Error: Seahub failed to start.
Please try to run "./seahub.sh start" again

Da die Fehlermeldungen bei SeaFile nicht immer angezeigt werden oder (wenn sie denn mal angezeigt werden) klar sind, muss der Dienst mit einem Parameter gestartet werden. Dieser zeigt mehr Details an:

./seahub.sh start-fastcgi
LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub (fastcgi) at 127.0.0.1:8000 ...
Traceback (most recent call last):
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/seafile-server-8.0.5/seahub/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/contrib/sessions/models.py", line 1, in <module>
    from django.contrib.sessions.base_session import (
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/contrib/sessions/base_session.py", line 26, in <module>
    class AbstractBaseSession(models.Model):
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/models/base.py", line 117, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/models/base.py", line 321, in add_to_class
    value.contribute_to_class(cls, name)
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/models/options.py", line 204, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/utils.py", line 201, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/utils.py", line 110, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/seafile-server-8.0.5/seahub/thirdpart/django/db/backends/mysql/base.py", line 20, in <module>
    ) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
Error:Seahub failed to start.

Aha. SeaFile fehlt der mySQL-Client.

Der einfache Weg per PIP Installation kann versucht werden:

pip3 install mysqlclient

… schlägt aber in fast allen Fällen fehl:

Collecting mysqlclient
  Downloading https://files.pythonhosted.org/packages/3c/df/59cd2fa5e48d0804/mysqlclient-2.0.3.tar.gz (88kB)
    100% |*******************| 92kB 964kB/s 
    Complete output from command python setup.py egg_info:
    /bin/sh: 1: mysql_config: not found
    /bin/sh: 1: mariadb_config: not found
    /bin/sh: 1: mysql_config: not found
    mysql_config --version
    mariadb_config --version
    mysql_config --libs
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-j7lny7bi/mysqlclient/setup.py", line 15, in <module>
        metadata, options = get_config()
      File "/tmp/pip-install-j7lny7bi/mysqlclient/setup_posix.py", line 70, in get_config
        libs = mysql_config("libs")
      File "/tmp/pip-install-j7lny7bi/mysqlclient/setup_posix.py", line 31, in mysql_config
        raise OSError("{} not found".format(_mysql_config_path))
    OSError: mysql_config not found
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-j7lny7bi/mysqlclient/

Wäre ja langweilig, wenn’s mal einfach so klappen würde.

Zuerst die PIP Version herausfinden:

pip3 -V
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

In diesem ist Version 3.7 installiert (sh. Ende der vorherigen Ausgabe). Die Version wird im folgenden Befehl am Anfang eingefügt:

python3.7 -m pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/cd/82/04e9aaf603fdbaecb4323b9e72/pip-21.1.2-py3-none-any.whl (1.5MB)
    100% |*******************| 1.6MB 248kB/s 
Installing collected packages: pip
  Found existing installation: pip 18.1
Successfully installed pip-21.1.2

Dann braucht das System noch die mySQL DEV-Module und da (wie bei den meisten aktuellen Linux Systemen) der MariaDB-Server und nicht der mySQL-Server installiert ist, wird das "libmariadbclient" Package installiert. Wer wirklich den mySQL-Server installiert hat, der installiert an dieser Stelle bitte das "libmysqldbclient-dev" Paket.

sudo apt-get install -y libmariadbclient-dev
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  libevent-2.1-6 libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28
  libidn2-dev libmariadb-dev libp11-kit-dev libtasn1-6-dev libtasn1-doc libunbound8 nettle-dev
Vorgeschlagene Pakete:
  gmp-doc libgmp10-doc libmpfr-dev gnutls-bin gnutls-doc
Die folgenden NEUEN Pakete werden installiert:
  libevent-2.1-6 libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28
  libidn2-dev libmariadb-dev libmariadbclient-dev libp11-kit-dev libtasn1-6-dev libtasn1-doc libunbound8
  nettle-dev
0 aktualisiert, 15 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.
Es müssen 5.850 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 18,8 MB Plattenplatz zusätzlich benutzt.
Holen:1 http://ftp.de.debian.org/debian buster/main amd64 libevent-2.1-6 amd64 2.1.8-stable-4 [177 kB]
Holen:2 http://security.debian.org/debian-security buster/updates/main amd64 nettle-dev amd64 3.4.1-1+deb10u1 [1.077 kB]
Holen:3 http://ftp.de.debian.org/debian buster/main amd64 libgmpxx4ldbl amd64 2:6.1.2+dfsg-4 [22,9 kB]
Holen:4 http://ftp.de.debian.org/debian buster/main amd64 libgmp-dev amd64 2:6.1.2+dfsg-4 [628 kB]
Holen:5 http://ftp.de.debian.org/debian buster/main amd64 libunbound8 amd64 1.9.0-2+deb10u2 [462 kB]
Holen:6 http://ftp.de.debian.org/debian buster/main amd64 libgnutls-dane0 amd64 3.6.7-4+deb10u7 [317 kB]
Holen:7 http://ftp.de.debian.org/debian buster/main amd64 libgnutls-openssl27 amd64 3.6.7-4+deb10u7 [318 kB]
Holen:8 http://ftp.de.debian.org/debian buster/main amd64 libgnutlsxx28 amd64 3.6.7-4+deb10u7 [14,6 kB]
Holen:9 http://ftp.de.debian.org/debian buster/main amd64 libidn2-dev amd64 2.0.5-1+deb10u1 [79,5 kB]
Holen:10 http://ftp.de.debian.org/debian buster/main amd64 libp11-kit-dev amd64 0.23.15-2+deb10u1 [196 kB]
Holen:11 http://ftp.de.debian.org/debian buster/main amd64 libtasn1-6-dev amd64 4.13-3 [104 kB]
Holen:12 http://ftp.de.debian.org/debian buster/main amd64 libgnutls28-dev amd64 3.6.7-4+deb10u7 [1.088 kB]
Holen:13 http://ftp.de.debian.org/debian buster/main amd64 libmariadb-dev amd64 1:10.3.29-0+deb10u1 [1.020 kB]
Holen:14 http://ftp.de.debian.org/debian buster/main amd64 libmariadbclient-dev amd64 1:10.3.29-0+deb10u1 [31,4 kB]
Holen:15 http://ftp.de.debian.org/debian buster/main amd64 libtasn1-doc all 4.13-3 [317 kB]
Es wurden 5.850 kB in 5 s geholt (1.161 kB/s).
Vormals nicht ausgewähltes Paket libevent-2.1-6:amd64 wird gewählt.
(Lese Datenbank ... 156835 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../00-libevent-2.1-6_2.1.8-stable-4_amd64.deb ...
Entpacken von libevent-2.1-6:amd64 (2.1.8-stable-4) ...
Vormals nicht ausgewähltes Paket libgmpxx4ldbl:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../01-libgmpxx4ldbl_2%3a6.1.2+dfsg-4_amd64.deb ...
Entpacken von libgmpxx4ldbl:amd64 (2:6.1.2+dfsg-4) ...
Vormals nicht ausgewähltes Paket libgmp-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../02-libgmp-dev_2%3a6.1.2+dfsg-4_amd64.deb ...
Entpacken von libgmp-dev:amd64 (2:6.1.2+dfsg-4) ...
Vormals nicht ausgewähltes Paket libunbound8:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../03-libunbound8_1.9.0-2+deb10u2_amd64.deb ...
Entpacken von libunbound8:amd64 (1.9.0-2+deb10u2) ...
Vormals nicht ausgewähltes Paket libgnutls-dane0:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../04-libgnutls-dane0_3.6.7-4+deb10u7_amd64.deb ...
Entpacken von libgnutls-dane0:amd64 (3.6.7-4+deb10u7) ...
Vormals nicht ausgewähltes Paket libgnutls-openssl27:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../05-libgnutls-openssl27_3.6.7-4+deb10u7_amd64.deb ...
Entpacken von libgnutls-openssl27:amd64 (3.6.7-4+deb10u7) ...
Vormals nicht ausgewähltes Paket libgnutlsxx28:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../06-libgnutlsxx28_3.6.7-4+deb10u7_amd64.deb ...
Entpacken von libgnutlsxx28:amd64 (3.6.7-4+deb10u7) ...
Vormals nicht ausgewähltes Paket libidn2-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../07-libidn2-dev_2.0.5-1+deb10u1_amd64.deb ...
Entpacken von libidn2-dev:amd64 (2.0.5-1+deb10u1) ...
Vormals nicht ausgewähltes Paket libp11-kit-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../08-libp11-kit-dev_0.23.15-2+deb10u1_amd64.deb ...
Entpacken von libp11-kit-dev:amd64 (0.23.15-2+deb10u1) ...
Vormals nicht ausgewähltes Paket libtasn1-6-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../09-libtasn1-6-dev_4.13-3_amd64.deb ...
Entpacken von libtasn1-6-dev:amd64 (4.13-3) ...
Vormals nicht ausgewähltes Paket nettle-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../10-nettle-dev_3.4.1-1+deb10u1_amd64.deb ...
Entpacken von nettle-dev:amd64 (3.4.1-1+deb10u1) ...
Vormals nicht ausgewähltes Paket libgnutls28-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../11-libgnutls28-dev_3.6.7-4+deb10u7_amd64.deb ...
Entpacken von libgnutls28-dev:amd64 (3.6.7-4+deb10u7) ...
Vormals nicht ausgewähltes Paket libmariadb-dev wird gewählt.
Vorbereitung zum Entpacken von .../12-libmariadb-dev_1%3a10.3.29-0+deb10u1_amd64.deb ...
Entpacken von libmariadb-dev (1:10.3.29-0+deb10u1) ...
Vormals nicht ausgewähltes Paket libmariadbclient-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../13-libmariadbclient-dev_1%3a10.3.29-0+deb10u1_amd64.deb ...
Entpacken von libmariadbclient-dev:amd64 (1:10.3.29-0+deb10u1) ...
Vormals nicht ausgewähltes Paket libtasn1-doc wird gewählt.
Vorbereitung zum Entpacken von .../14-libtasn1-doc_4.13-3_all.deb ...
Entpacken von libtasn1-doc (4.13-3) ...
libgnutls-openssl27:amd64 (3.6.7-4+deb10u7) wird eingerichtet ...
libtasn1-doc (4.13-3) wird eingerichtet ...
libgmpxx4ldbl:amd64 (2:6.1.2+dfsg-4) wird eingerichtet ...
libgnutlsxx28:amd64 (3.6.7-4+deb10u7) wird eingerichtet ...
libidn2-dev:amd64 (2.0.5-1+deb10u1) wird eingerichtet ...
libevent-2.1-6:amd64 (2.1.8-stable-4) wird eingerichtet ...
libtasn1-6-dev:amd64 (4.13-3) wird eingerichtet ...
libp11-kit-dev:amd64 (0.23.15-2+deb10u1) wird eingerichtet ...
libgmp-dev:amd64 (2:6.1.2+dfsg-4) wird eingerichtet ...
nettle-dev:amd64 (3.4.1-1+deb10u1) wird eingerichtet ...
libunbound8:amd64 (1.9.0-2+deb10u2) wird eingerichtet ...
libgnutls-dane0:amd64 (3.6.7-4+deb10u7) wird eingerichtet ...
libgnutls28-dev:amd64 (3.6.7-4+deb10u7) wird eingerichtet ...
libmariadb-dev (1:10.3.29-0+deb10u1) wird eingerichtet ...
libmariadbclient-dev:amd64 (1:10.3.29-0+deb10u1) wird eingerichtet ...
Trigger für libc-bin (2.28-10) werden verarbeitet ...
Trigger für man-db (2.8.5-2) werden verarbeitet ...

Jetzt kann auch per PIP der fehlende "mysqlclient" installiert werden:

python3.7 -m pip install mysqlclient
Collecting mysqlclient
  Using cached mysqlclient-2.0.3.tar.gz (88 kB)
Building wheels for collected packages: mysqlclient
  Building wheel for mysqlclient (setup.py) ... done
  Created wheel for mysqlclient: filename=mysqlclient-2.0.3-cp37-cp37m-linux_x86_64.whl size=112059 sha256=afc34fe65998bd44021649
  Stored in directory: /root/.cache/pip/wheels/79/1c/f8/11fafab45fe6696eea6375fb7
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-2.0.3
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv

Jetzt kann der seaHub Service gestartet werden:

./seahub.sh start
LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub at port 8000 ...

Seahub is started

Done.
1 Kommentar Kommentar schreiben
Matthias sagt:

Danke! Funktioniert, so musste ich mir die Lösung der vielen kleinen einzel-Probleme nicht allein suchen. Nur meine Python-Version war noch 3.6. ansonsten passte alles.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

4 − drei =