Mac pip安装mysqlclient报错

逸兴
逸兴
逸兴
57
文章
25
评论
2024-03-2621:55:35Mac pip安装mysqlclient报错已关闭评论 5632字阅读18分46秒

问题详情

环境: Mac OS14.4, Python3.10, Django 5.0

mac 上使用docker运行了一个mysql容器, 然后终端中安装了brew install mysql-client, 通过终端可以正常连接mysql

Mac pip安装mysqlclient报错
然后, venv中安装pip install mysqlclient报错
Exception: Can not find valid pkg-config name.
Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually

(venv) (base) liang@liangdeMacBook-Pro devops % pip install mysqlclient  
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting mysqlclient
  Using cached https://pypi.tuna.tsinghua.edu.cn/packages/79/33/996dc0ba3f03e2399adc91a7de1f61cb14b57ebdb4cc6eca8a78723043cb/mysqlclient-2.2.4.tar.gz (90 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]
      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.
      Trying pkg-config --exists libmariadb
      Command 'pkg-config --exists libmariadb' returned non-zero exit status 1.
      Traceback (most recent call last):
        File "/Users/liang/PycharmProjects/djangoProject/devops/venv/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/Users/liang/PycharmProjects/djangoProject/devops/venv/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/Users/liang/PycharmProjects/djangoProject/devops/venv/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/private/var/folders/w1/vygtq8850p3g43tsxry8bs2m0000gn/T/pip-build-env-87hk2kbz/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 325, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
        File "/private/var/folders/w1/vygtq8850p3g43tsxry8bs2m0000gn/T/pip-build-env-87hk2kbz/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 295, in _get_build_requires
          self.run_setup()
        File "/private/var/folders/w1/vygtq8850p3g43tsxry8bs2m0000gn/T/pip-build-env-87hk2kbz/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "<string>", line 155, in <module>
        File "<string>", line 49, in get_config_posix
        File "<string>", line 28, 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.

note: This error originates from a subprocess, and is likely not a problem with pip.
(venv) (base) liang@liangdeMacBook-Pro devops % 
(venv) (base) liang@liangdeMacBook-Pro devops % 

解决方法

虽然可以改用pymysql, 但是还是想试着解决下这个问题。

看报错是在构建时缺少依赖, 提示无法通过pkg-config找到mysqlclientmariadblibmariadb。并且说明了可以通过设置环境变量MYSQLCLIENT_CFLAGSMYSQLCLIENT_LDFLAGS手动指定所需内容。

搜索下了这两个变量:

  • MYSQLCLIENT_CFLAGS: 这个环境变量用于指定C编译器(如gcc)用于编译mysqlclient时的标志。这些标志通常包括头文件的位置(使用-I选项指定),以及其他优化和警告选项。
  • MYSQLCLIENT_LDFLAGS: 这个环境变量用于指定链接器用于链接mysqlclient时的标志。这些标志通常包括库文件的位置(使用-L选项指定)和需要链接的库名称(使用-l选项)。

按照提示试一下:

这两个路径可以通过mysql_config命令获得

先测试下 mysql_config命令

Mac pip安装mysqlclient报错

看样子正常, 然后临时导出下这个环境变量, 测试下

(base) liang@liangdeMacBook-Pro ~ % export MYSQLCLIENT_CFLAGS=`mysql_config --cflags`
(base) liang@liangdeMacBook-Pro ~ % export MYSQLCLIENT_LDFLAGS=`mysql_config --libs` 

回到venv环境中设置这两个全局变量, 然后重新安装pip install mysqlclient

Mac pip安装mysqlclient报错

接下来出现了新的报错

一个问题解决了, 由出现了另一个问题

  • ld: library 'zstd' not found*
  • 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*

    
      clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g "-Dversion_info=(2, 2, 4, 'final', 0)" -D__version__=2.2.4 -I/Users/liang/PycharmProjects/djangoProject/devops/venv/include -I/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10 -c src/MySQLdb/_mysql.c -o build/temp.macosx-10.9-universal2-cpython-310/src/MySQLdb/_mysql.o -I/opt/homebrew/opt/mysql-client/include/mysql -std=c99
      clang -bundle -undefined dynamic_lookup -arch arm64 -arch x86_64 -g build/temp.macosx-10.9-universal2-cpython-310/src/MySQLdb/_mysql.o -o build/lib.macosx-10.9-universal2-cpython-310/MySQLdb/_mysql.cpython-310-darwin.so -L/opt/homebrew/opt/mysql-client/lib -lmysqlclient -lz -lzstd -lssl -lcrypto -lresolv
      ld: library 'zstd' not found
      clang: error: linker command failed with exit code 1 (use -v to see invocation)
      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
    (venv) (base) liang@liangdeMacBook-Pro devops % 

根据提示安装下<code>zstd</code>

![image-20240324191938029](https://image.lastack.top/notebook/2024/03/24-19-271888.png)

*brew显示zstd已经安装过了, 那么应该是路径设置的问题了!*

![image-20240324192219392](https://image.lastack.top/notebook/2024/03/24-19-1f17b2.png)

miniconda是之前安装ChatGLM时搞的, 应该是冲突了, 这里也不方便卸载!

我们试下通过手动指定链接器的搜索路径, 来让编译器到miniconda中找<code>zstd</code>

```bash
export LDFLAGS=&quot;-L/usr/local/lib -L/opt/homebrew/lib -L/Users/liang/miniconda3/bin/&quot;

然后重新安装下pip install mysqlclient

Mac pip安装mysqlclient报错

安装成功, 启动django项目测试下:
启动成功:

Mac pip安装mysqlclient报错

Mac pip安装mysqlclient报错

后续

为了避免下次出现类似问题, 我们重新设置下环境变量

~/.zshrc中把这三个环境变量写进去, 避免重启失效

Mac pip安装mysqlclient报错

结束。




https://www.hugbg.com/archives/3831.html
逸兴
  • 本文由 发表于 2024-03-2621:55:35
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
自动更新SSL证书 默认分类

自动更新SSL证书

现在免费的SSL证书只有三个月有效期,有一个博客和图床都用的ssl证书到期需要重新签发,挺麻烦的。原本想着写个脚本通过阿里云的 OpenAPI 进行证书的签发和部署,但是偶然发现了 ACME 这个项目...
推导式、生成式与生成器 基础语法

推导式、生成式与生成器

推导式 概述 Python中的推导式是一种快速、简洁的数据结构创建方式,不需要手动创建数据结构中的每一个元素,类似于给出一个规律,python会根据这个规律自动填充数据结构。支持有列表推导式、字典推导...
CVE-2024-38077 Windows RDL漏洞检测修复方法(末尾) 默认分类

CVE-2024-38077 Windows RDL漏洞检测修复方法(末尾)

一、漏洞详情 Windows Server是由微软开发的操作系统系列,专为服务器环境设计,用于管理网络、数据存储和应用程序的运行。它为企业和组织提供了稳定、可靠的服务器平台,支持各种规模的网络基础设施...
Django DRF禁用URL末尾斜杆(:) 点点滴滴

Django DRF禁用URL末尾斜杆(:)

一、关于URL末尾斜杆 比如http://127.0.0.1:8000/api/v1/register 和 http://127.0.0.1:8000/api/v1/register/, 这两个是同一...