Page MenuHomePhabricator

Can't pip install mysqlclient on Toolforge
Open, Needs TriagePublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • become a tool
  • pip install mysqlclient

What happens?:
I get an error saying that it cannot find valid pkg-config name:

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
  ╰─> [24 lines of output]
      /bin/sh: 1: pkg-config: not found
      /bin/sh: 1: pkg-config: not found
      Trying pkg-config --exists mysqlclient
      Command 'pkg-config --exists mysqlclient' returned non-zero exit status 127.
      Trying pkg-config --exists mariadb
      Command 'pkg-config --exists mariadb' returned non-zero exit status 127.
      Traceback (most recent call last):
        File "/data/project/<TOOL>/www/python/venv/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/data/project/<TOOL>/www/python/venv/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/data/project/<TOOL>/www/python/venv/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/tmp/pip-build-env-_n_r47n9/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 355, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
        File "/tmp/pip-build-env-_n_r47n9/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 325, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-_n_r47n9/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 341, in run_setup
          exec(code, locals())
        File "<string>", line 154, in <module>
        File "<string>", line 48, in get_config_posix
        File "<string>", line 27, in find_package_name
      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.

In the Wikimedia Cloud Services support, @LucasWerkmeister noted that

the /usr/lib/x86_64-linux-gnu/pkgconfig/mysqlclient.pc pkg-config file for “mysqlclient” (actually mariadbclient with compat) is installed in the container, but pkg-config isn’t

What should have happened instead?:
Pip install it as usual

Event Timeline

but pkg-config isn’t

(Apparently the correct Debian package these days is pkgconf, a replacement for the now-transitional pkg-config.)

I don’t know if pkgconf used to be pulled into the containers by another package, or how else this used to work (@Ederporto said on Telegram that this is a recent problem), but I suppose pkgconf should be added to the packages installed in the python base Dockerfile (T140110).

taavi subscribed.

Sigh. mysqlclient does ship Windows wheels but not manylinux ones. Installing pkgconf is probably fine, but using pymysql or an another pure-Python client is likely easier in the long run if possible.