2

I am currently on macOS 14.3 on Apple silicon. I am trying to install mysqlclient using pip. I already have mysql package installed using brew install mysql pkg-config but my mysqlclient installation is failing due to the errors mentioned below:

I am trying to run pip install mysqlclient

I am getting the following error:

  building 'MySQLdb._mysql' extension
      creating build/temp.macosx-14.1-arm64-cpython-311
      creating build/temp.macosx-14.1-arm64-cpython-311/src
      creating build/temp.macosx-14.1-arm64-cpython-311/src/MySQLdb
      clang -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/opt/homebrew/opt/mysql-client/include "-Dversion_info=(2, 2, 1, 'final', 0)" -D__version__=2.2.1 -I/Users/avishekde/.pyenv/versions/3.11.6/include/python3.11 -c src/MySQLdb/_mysql.c -o build/temp.macosx-14.1-arm64-cpython-311/src/MySQLdb/_mysql.o -I/opt/homebrew/Cellar/mysql-client/8.3.0/include/mysql -std=c99
      src/MySQLdb/_mysql.c:527:9: error: call to undeclared function 'mysql_ssl_set'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
              mysql_ssl_set(&(self->connection), key, cert, ca, capath, cipher);
              ^
      src/MySQLdb/_mysql.c:527:9: note: did you mean 'mysql_close'?
      /opt/homebrew/Cellar/mysql-client/8.3.0/include/mysql/mysql.h:797:14: note: 'mysql_close' declared here
      void STDCALL mysql_close(MYSQL *sock);
                   ^
      src/MySQLdb/_mysql.c:1795:9: error: call to undeclared function 'mysql_kill'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
          r = mysql_kill(&(self->connection), pid);
              ^
      src/MySQLdb/_mysql.c:1795:9: note: did you mean 'mysql_ping'?
      /opt/homebrew/Cellar/mysql-client/8.3.0/include/mysql/mysql.h:525:13: note: 'mysql_ping' declared here
      int STDCALL mysql_ping(MYSQL *mysql);
                  ^
      src/MySQLdb/_mysql.c:2011:9: error: call to undeclared function 'mysql_shutdown'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
          r = mysql_shutdown(&(self->connection), SHUTDOWN_DEFAULT);
              ^
      3 errors generated.
      error: command '/usr/bin/clang' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for mysqlclient
Failed to build mysqlclient
ERROR: Could not build wheels for mysqlclient, which is required to install pyproject.toml-based projects

The following is the output from pkg-config --cflags --libs mysqlclient

-I/opt/homebrew/Cellar/mysql-client/8.3.0/include/mysql -L/opt/homebrew/Cellar/mysql-client/8.3.0/lib -lmysqlclient
3
  • 2
    And you read the installation steps in github.com/PyMySQL/…? Did you install pkg-config? Commented Jan 30, 2024 at 1:15
  • 1
    mysql_ssl_set() has been removed as of mysql 8.3.0 - for now you might want to brew install a specifically lower version of mysql until the client libraries catch up dev.mysql.com/doc/relnotes/mysql/8.3/en/news-8-3-0.html Commented Jan 30, 2024 at 11:34
  • 1
    @Mike'Pomax'Kamermans: Yes I have that installed. I have edited the question to reflect that. The issue is with mysql 8.3.0 as Ian mentions. The below answer fixes things for now Commented Jan 30, 2024 at 18:28

4 Answers 4

5

You can download the source code,and make some modifications, then build & install. Here are the details: https://github.com/PyMySQL/mysqlclient/issues/688

Sign up to request clarification or add additional context in comments.

Comments

2

It happens due to incompatible pip dependency. In my case, requirements.txt had mysqlclient==2.1.0. I updated it to mysqlclient==2.2.3. Older operating systems have a different set of versions. I was on MAC M2 with the latest OS as of 2024. On my colleague's system, which had a different version, it worked.

Comments

1

You can try following command:

brew install [email protected] pkg-config

export PKG_CONFIG_PATH="/opt/homebrew/opt/[email protected]/lib/pkgconfig"

pip install mysqlclient

it works for me.

Comments

0

If you're not ready to upgrade your mysqlclient library, you can also downgrade your version of Homebrew's mysql-client package and prevent Homebrew from upgrading it to 8.3.0.

Steps documented here: https://i-am-j.ag/blog/posts/python-mysql-8.3.0-homebrew/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.