问题详情
环境: Mac OS14.4, Python3.10, Django 5.0
mac 上使用docker运行了一个mysql容器, 然后终端中安装了brew install mysql-client
, 通过终端可以正常连接mysql
然后, 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
找到mysqlclient
、mariadb
或libmariadb
。并且说明了可以通过设置环境变量MYSQLCLIENT_CFLAGS
和MYSQLCLIENT_LDFLAGS
手动指定所需内容。
搜索下了这两个变量:
MYSQLCLIENT_CFLAGS
: 这个环境变量用于指定C编译器(如gcc)用于编译mysqlclient
时的标志。这些标志通常包括头文件的位置(使用-I
选项指定),以及其他优化和警告选项。MYSQLCLIENT_LDFLAGS
: 这个环境变量用于指定链接器用于链接mysqlclient
时的标志。这些标志通常包括库文件的位置(使用-L
选项指定)和需要链接的库名称(使用-l
选项)。
按照提示试一下:
这两个路径可以通过mysql_config
命令获得
先测试下 mysql_config
命令
看样子正常, 然后临时导出下这个环境变量, 测试下
(base) liang@liangdeMacBook-Pro ~ % export MYSQLCLIENT_CFLAGS=`mysql_config --cflags`
(base) liang@liangdeMacBook-Pro ~ % export MYSQLCLIENT_LDFLAGS=`mysql_config --libs`
回到venv环境中设置这两个全局变量, 然后重新安装pip install 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>

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

miniconda是之前安装ChatGLM时搞的, 应该是冲突了, 这里也不方便卸载!
我们试下通过手动指定链接器的搜索路径, 来让编译器到miniconda中找<code>zstd</code>
```bash
export LDFLAGS="-L/usr/local/lib -L/opt/homebrew/lib -L/Users/liang/miniconda3/bin/"
然后重新安装下pip install mysqlclient
安装成功, 启动django项目测试下:
启动成功:
后续
为了避免下次出现类似问题, 我们重新设置下环境变量
在~/.zshrc
中把这三个环境变量写进去, 避免重启失效
结束。
https://www.hugbg.com/archives/3831.html
评论