使用 pipenv 安装 mysqlclient 在 Mac OS 上从未成功(M1 和 intel CPU)
installing mysqlclient with pipenv never succeed on Mac OS (both M1 and intel CPU)
我尝试在我的两台 macbook pro(intel 2018 和 M1 2020)上使用 pipenv 安装 mysqlclient
,但它一直给我以下错误:
ld: library not found for -lzstd
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'clang' failed with exit status 1
我想出了一个解决方案,它允许我在阅读此 comment 后使用 homebrew
显式安装 mysqlclient
,使用以下命令:
brew install zstd
CFLAGS="-I$(brew --prefix)/include"
LDFLAGS="-L$(brew --prefix)/lib"
brew install mysqlclient
但是,我仍然遇到与 pipenv
相同的问题,我真的很想让它与 pipenv 一起工作,有什么想法吗?
这是我的 pipfile(不包含 mysqlclient,因为它失败了):
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
pandas = "*"
numpy = "*"
mysql-connector-python = "*"
[dev-packages]
[requires]
python_version = "3.8"
经过几个小时的发现和阅读互联网上的每个 post,我意识到 ld: library not found for -lzstd
意味着定义的 zstd 库的路径是错误的,所以我仔细检查了我导出的路径和 bingo .
这里总结了如何在 M1 mac 上安装 mysqlclient
到 pipenv
(对于英特尔,只是自制程序根路径不同):
首先按照https://brew.sh/安装homebrew
(统一安装包,也可以选择不使用,只需要找出所有需要的路径即可图书馆)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
接下来,使用homebrew安装mysql
brew install mysql
然后由于某些原因,mysqlclient
软件包需要 openSSL
和 zstd
(如果不这样做,您将收到一条错误消息,提示您安装)
brew install openSSL
brew install zstd
现在,要让计算机在安装 mysqlclient
时知道这些必需的包在哪里,您需要在 .bash_profile/.zshrc
中明确定义路径。同样,如果您不执行此步骤,则会有 errors/warnings 告诉您执行此操作。对我来说,因为所有东西都是通过 homebrew
安装的,它们都位于 homebrew
目录下,所以我可以快速将它们添加到我的 .zshrc
中,请注意 LDFLAGS 有两个路径,您可能会通读许多在 LDFLAGS 上只有一条路径的解决方案,但它们不会成功,因为在安装 mysqlclient
软件包之前需要安装两个库,这就是我卡住的地方。。
export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib -L/opt/homebrew/Cellar/zstd/1.5.0/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
您可能想知道什么是 LDFLAGS
和 CPPFLAGS
。根据这个page,
LDFLAGS refers for linker flags and is often user defined libraries
CPPLAGS is used by the preprocessor and is often the include directory
所以这两个标志基本上让您的安装知道您的先决条件的路径在哪里。并且每个标志可以包含多个路径。
现在您可以愉快地pipenv install mysqlclient
并收到一条成功消息。
我尝试在我的两台 macbook pro(intel 2018 和 M1 2020)上使用 pipenv 安装 mysqlclient
,但它一直给我以下错误:
ld: library not found for -lzstd
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'clang' failed with exit status 1
我想出了一个解决方案,它允许我在阅读此 comment 后使用 homebrew
显式安装 mysqlclient
,使用以下命令:
brew install zstd
CFLAGS="-I$(brew --prefix)/include"
LDFLAGS="-L$(brew --prefix)/lib"
brew install mysqlclient
但是,我仍然遇到与 pipenv
相同的问题,我真的很想让它与 pipenv 一起工作,有什么想法吗?
这是我的 pipfile(不包含 mysqlclient,因为它失败了):
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
pandas = "*"
numpy = "*"
mysql-connector-python = "*"
[dev-packages]
[requires]
python_version = "3.8"
经过几个小时的发现和阅读互联网上的每个 post,我意识到 ld: library not found for -lzstd
意味着定义的 zstd 库的路径是错误的,所以我仔细检查了我导出的路径和 bingo .
这里总结了如何在 M1 mac 上安装 mysqlclient
到 pipenv
(对于英特尔,只是自制程序根路径不同):
首先按照https://brew.sh/安装homebrew
(统一安装包,也可以选择不使用,只需要找出所有需要的路径即可图书馆)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
接下来,使用homebrew安装mysql
brew install mysql
然后由于某些原因,mysqlclient
软件包需要 openSSL
和 zstd
(如果不这样做,您将收到一条错误消息,提示您安装)
brew install openSSL
brew install zstd
现在,要让计算机在安装 mysqlclient
时知道这些必需的包在哪里,您需要在 .bash_profile/.zshrc
中明确定义路径。同样,如果您不执行此步骤,则会有 errors/warnings 告诉您执行此操作。对我来说,因为所有东西都是通过 homebrew
安装的,它们都位于 homebrew
目录下,所以我可以快速将它们添加到我的 .zshrc
中,请注意 LDFLAGS 有两个路径,您可能会通读许多在 LDFLAGS 上只有一条路径的解决方案,但它们不会成功,因为在安装 mysqlclient
软件包之前需要安装两个库,这就是我卡住的地方。。
export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib -L/opt/homebrew/Cellar/zstd/1.5.0/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
您可能想知道什么是 LDFLAGS
和 CPPFLAGS
。根据这个page,
LDFLAGS refers for linker flags and is often user defined libraries
CPPLAGS is used by the preprocessor and is often the include directory
所以这两个标志基本上让您的安装知道您的先决条件的路径在哪里。并且每个标志可以包含多个路径。
现在您可以愉快地pipenv install mysqlclient
并收到一条成功消息。