找不到-lzlib库,Mac M2芯片,pip安装mysqlclient。

3

当我尝试运行pip install mysqlclient时,遇到了这个问题。我已经使用brew或pip安装了所有必要的库。我尝试重新安装zlib,但似乎没有任何作用。我尝试下载brew mysql、mysql-client等,但没有任何结果。

Collecting mysqlclient
  Using cached mysqlclient-2.1.1.tar.gz (88 kB)
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: mysqlclient
  Building wheel for mysqlclient (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py bdist_wheel did not run successfully.
   exit code: 1
  ╰─> [43 lines of output]
      mysql_config --version
      ['8.0.33']
      mysql_config --libs
      ['-L/opt/homebrew/Cellar/mysql/8.0.33/lib', '-lmysqlclient', '-lzlib', '-lzstd', '-L/opt/homebrew/opt/openssl@1.1/lib', '-lssl', '-lcrypto', '-lresolv']
      mysql_config --cflags
      ['-I/opt/homebrew/Cellar/mysql/8.0.33/include/mysql']
      ext_options:
        library_dirs: ['/opt/homebrew/Cellar/mysql/8.0.33/lib', '/opt/homebrew/opt/openssl@1.1/lib']
        libraries: ['mysqlclient', 'zlib', 'resolv']
        extra_compile_args: ['-std=c99']
        extra_link_args: []
        include_dirs: ['/opt/homebrew/Cellar/mysql/8.0.33/include/mysql']
        extra_objects: []
        define_macros: [('version_info', "(2,1,1,'final',0)"), ('__version__', '2.1.1')]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.macosx-10.9-universal2-cpython-311
      creating build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/__init__.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/_exceptions.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/connections.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/converters.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/cursors.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/release.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      copying MySQLdb/times.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb
      creating build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      copying MySQLdb/constants/__init__.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      copying MySQLdb/constants/CLIENT.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      copying MySQLdb/constants/CR.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      copying MySQLdb/constants/ER.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      copying MySQLdb/constants/FLAG.py -> build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/constants
      running build_ext
      building 'MySQLdb._mysql' extension
      creating build/temp.macosx-10.9-universal2-cpython-311
      creating build/temp.macosx-10.9-universal2-cpython-311/MySQLdb
      clang -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -Dversion_info=(2,1,1,'final',0) -D__version__=2.1.1 -I/opt/homebrew/Cellar/mysql/8.0.33/include/mysql -I/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 -c MySQLdb/_mysql.c -o build/temp.macosx-10.9-universal2-cpython-311/MySQLdb/_mysql.o -std=c99
      clang -bundle -undefined dynamic_lookup -arch arm64 -arch x86_64 -g -L/opt/homebrew/opt/zlib/lib build/temp.macosx-10.9-universal2-cpython-311/MySQLdb/_mysql.o -L/opt/homebrew/Cellar/mysql/8.0.33/lib -L/opt/homebrew/opt/openssl@1.1/lib -lmysqlclient -lzlib -lresolv -o build/lib.macosx-10.9-universal2-cpython-311/MySQLdb/_mysql.cpython-311-darwin.so
      ld: library not found for -lzlib
      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
  Running setup.py clean for mysqlclient
Failed to build mysqlclient
ERROR: Could not build wheels for mysqlclient, which is required to install pyproject.toml-based projects

我已经尝试过:

  • 嘿,我在尝试将mysqlclient安装到我的Mac上的Django项目时遇到了错误

  • 像这样安装

    $ brew install mysql
    $ pip install mysqlclient
    
  • 替代安装方式

    $ brew install mysql-client
    $ echo 'export PATH="/usr/local/opt/mysql-client/bin:$PATH"' >> ~/.bash_profile
    $ export PATH="/usr/local/opt/mysql-client/bin:$PATH"
    $ pip install mysqlclient
    
  • 我看到了这个:

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

    但是我有一台Mac,所以它无法解决我的问题。

    5个回答

    2
    安装完zlib后,您需要设置DYLD_LIBRARY_PATH环境变量。打开终端窗口并输入以下命令:
    export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH. 
    

    这将告诉您的系统在哪里找到zlib库。

    当然,如果/usr/local/lib不是路径,请更改它。


    所以在我的情况下,我会执行以下操作: export DYLD_LIBRARY_PATH=/opt/homebrew/opt/zlib/lib:$DYLD_LIBRARY_PATH。 - Tanner Green
    是的。你可以通过运行命令 echo $DYLD_LIBRARY_PATH 来进行测试。它应该输出 zlib 库目录的路径,以及 DYLD_LIBRARY_PATH 变量中已经存在的其他路径。 - Richard
    ➜ ~ brew info zlib ==> zlib: 稳定版 1.2.13 (瓶装), HEAD [仅限此桶] 通用无损数据压缩库 https://zlib.net/ /opt/homebrew/Cellar/zlib/1.2.13 (13 个文件, 399.0KB)我在这里获取了信息,然后将其添加到文件路径中,但它仍然找不到库? - Tanner Green
    等一下,你使用的是/opt/homebrew/opt/zlib/lib还是/opt/homebrew/Cellar/zlib/1.2.13/lib?你必须使用第二个。只有路径的直接链接才能起作用。 - Richard

    2

    看起来是MySQL 8.0.33问题

    问题在于大多数(全部?)使用8.0.33的其他平台似乎都使用了MySQL捆绑的zlib而不是外部库,因此mysql_config根本没有引用zlib


    1
    今天我自己也遇到了同样的问题。由于这是一个较旧的Django项目,我能够安装mysql-client@5.7:
    brew install mysql-client@5.7
    

    我的.zprofile的一部分:

    # homebrew ssl
    export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"
    export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
    export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
    
    # homebrew zlib
    export LDFLAGS="$LDFLAGS -L/opt/homebrew/opt/zlib/lib"
    export CPPFLAGS="$CPPFLAGS -I/opt/homebrew/opt/zlib/include"
    
    # homebrew mysql
    export PATH="/opt/homebrew/opt/mysql-client@5.7/bin:$PATH"
    export LDFLAGS="$LDFLAGS -L/opt/homebrew/opt/mysql-client@5.7/lib"
    export CPPFLAGS="$CPPFLAGS -I/opt/homebrew/opt/mysql-client@5.7/include"
    
    # gdal
    export GDAL_LIBRARY_PATH="/opt/homebrew/opt/gdal/lib/libgdal.dylib"
    export GEOS_LIBRARY_PATH="/opt/homebrew/opt/geos/lib/libgeos_c.dylib"
    

    在撰写本文时,这是我能看到的唯一其他版本的mysql-client。

    然后在我的环境中执行所需的pip安装:

    pip install mysqlclient==1.4.6
    

    我已经成功安装了,但我不知道这是否适用于更新的版本。


    0

    你能试试这个吗?

    BREW_PREFIX=$(brew --prefix)
    export LDFLAGS="-L${BREW_PREFIX}/opt/openssl/lib -L${BREW_PREFIX}/lib"
    export CPPFLAGS="-I${BREW_PREFIX}/opt/openssl/include -I${BREW_PREFIX}/include"
    export MYSQLCLIENT_LDFLAGS="${LDFLAGS} -L${BREW_PREFIX}/opt/zlib/lib"
    export MYSQLCLIENT_CFLAGS="${CPPFLAGS} -I${BREW_PREFIX}/opt/zlib/include"
    

    % pip install mysqlclient
    Collecting mysqlclient
      Using cached mysqlclient-2.1.1-cp310-cp310-macosx_13_0_arm64.whl
    Installing collected packages: mysqlclient
    Successfully installed mysqlclient-2.1.1
    

    0

    这是由brew提供的mysql服务器出现的问题:

    brew uninstall mysql
    brew install mysql@5.7
    brew link mysql@5.7
    

    在那之后,您的 gem 构建应该可以直接运行,如果不能,您可以尝试传递所有的标志。
    export LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix)/lib"
    export CPPFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix zlib)/include -I$(brew --prefix)/include"
    export MYSQLCLIENT_LDFLAGS="${LDFLAGS}"
    export MYSQLCLIENT_CFLAGS="${CPPFLAGS}"
    export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/:$(brew --prefix zlib)/lib
    
    
    pip install mysqlclient
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接