P.R
P.R

Reputation: 1681

Mysqlclient cannot install via pip, cannot find pkg-config name in Ubuntu

I'm new to linux and VM's in general. Im currently trying to install mysqlclient on a clean Ubuntu Jammy 64 (22.4) vbox instance. The following commands are run beforehand:

    sudo add-apt-repository universe
    sudo apt-get install net-tools -y
    sudo apt-get install python3 -y
    sudo apt-get install python3-pip -y
    pip install pkgconfig
    sudo apt-get install pkg-config -y

When I try to run pip install mysqlclient I get the following error:

vagrant@Ctrl-A-EES:~$ pip install mysqlclient
Defaulting to user installation because normal site-packages is not writeable
Collecting mysqlclient
  Using cached mysqlclient-2.2.0.tar.gz (89 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [25 lines of output]
      Trying pkg-config --exists mysqlclient
      Command 'pkg-config --exists mysqlclient' returned non-zero exit status 1.
      Trying pkg-config --exists mariadb
      Command 'pkg-config --exists mariadb' returned non-zero exit status 1.
      Traceback (most recent call last):
        File "/usr/lib/python3/dist-packages/pip/_vendor/pep517/in_process/_in_process.py", line 363, in <module>
          main()
        File "/usr/lib/python3/dist-packages/pip/_vendor/pep517/in_process/_in_process.py", line 345, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/usr/lib/python3/dist-packages/pip/_vendor/pep517/in_process/_in_process.py", line 130, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 162, in get_requires_for_build_wheel
          return self._get_build_requires(
        File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 143, in _get_build_requires
          self.run_setup()
        File "/usr/lib/python3/dist-packages/setuptools/build_meta.py", line 158, in run_setup
          exec(compile(code, __file__, 'exec'), locals())
        File "setup.py", line 154, in <module>
          ext_options = get_config_posix(get_options())
        File "setup.py", line 48, in get_config_posix
          pkg_name = find_package_name()
        File "setup.py", line 27, in find_package_name
          raise Exception(
      Exception: Can not find valid pkg-config name.
      Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

Any suggestions would help greatly! Thanks!

Expected install to resolve without issue. Tried to resolve pkg-config dependency, to no avail.

Upvotes: 56

Views: 96555

Answers (8)

Jamilu Salisu
Jamilu Salisu

Reputation: 327

Here’s the equivalent command for macOS:

brew install pkg-config python3 mysql-client

Upvotes: 2

P.R
P.R

Reputation: 1681

Solution from FlyingTeller:

sudo apt-get install pkg-config python3-dev default-libmysqlclient-dev build-essential

Fixed the dependency.

Upvotes: 101

LongDev
LongDev

Reputation: 221

you guys can try this

sudo apt install libmysqlclient-dev default-libmysqlclient-dev

Upvotes: 2

Mircea Cristian
Mircea Cristian

Reputation: 23

For Rocky 9 the following did the trick:

dnf group install "Development Tools"
dnf install python3-devel mysql-devel pkgconfig

pip install mysql-connector mysqlclient

https://github.com/PyMySQL/mysqlclient

Upvotes: 1

NPE_Exception
NPE_Exception

Reputation: 381

I had to add build-essential and pkg-config to my Dockerfile after upgrading to Python 3.11 from 3.8 and the mysqlclient install started to fail with the same error. This is working for me now.

FROM --platform=linux/amd64 python:3.11-slim as build
...
RUN apt-get update -y
RUN apt-get install pkg-config -y
RUN apt-get install -y python3-dev build-essential
RUN apt-get install -y default-libmysqlclient-dev
...

Upvotes: 5

Ezekudep
Ezekudep

Reputation: 111

use this for Debian/Ubuntu

sudo apt-get update
sudo apt-get install gcc libmysqlclient-dev python3-dev

use this for Fedora:

sudo dnf install gcc mysql-devel python3-devel

then run again

pip install mysqlclient

Upvotes: 11

tykoon
tykoon

Reputation: 151

The error you are encountering while trying to install mysqlclient using pip3 is related to missing pkg-config and its inability to find the required dependencies for building the package.

pkg-config fails to find mysqlclient and mariadb libraries, which are needed to build the mysqlclient Python package.

Try these solutions:

  1. sudo apt-get update && sudo apt-get install python3-dev default-libmysqlclient-dev

If the above doesn't work:

  1. you can try installing the mysqlclient library by specifying the paths to the MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS environment variables manually, as suggested in the error message.

sudo MYSQLCLIENT_CFLAGS="-I/usr/include/mysql" MYSQLCLIENT_LDFLAGS="-L/usr/lib/x86_64-linux-gnu -lmysqlclient" pip3 install mysqlclient

NOTE: Replace /usr/include/mysql and /usr/lib/x86_64-linux-gnu with the correct paths to the mysqlclient headers and library files on your system if they are located elsewhere. The provided paths are common for Ubuntu-based systems.

Upvotes: 12

gil.fernandes
gil.fernandes

Reputation: 14621

In my case sudo apt install pkg-config was enough to run pip install mysqlclient.

Upvotes: 62

Related Questions