本文主要是介绍仍未知那天的pyenv为什么崩掉,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介
pyenv通过在PATH头部插入shims路径来实现对python版本的控制,结合了pip和virtualenv的功能,使用思路是先创建一个指定python版本的环境,然后在这个环境上安装相应的包。
本机环境
本机使用的是.zshrc
此时内容如下:
shanshan@EVYSHAN-MC0 ~ % cat ~/.zshrcexport PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
export PATH="/Library/Developer/CommandLineTools/usr/bin:$PATH"
export PYENV_ROOT=/usr/local/bin/pyenv
export PATH="$PYENV_ROOT/bin:$PATH"
export PATH="$PYENV_ROOT/shims:$PATH"
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export PATH="/usr/local/opt/mysql@8.0/bin:$PATH
export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion"
依次解释如下:
-
export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
- 这行命令将 MySQL 5.7 的 bin 目录添加到环境变量
PATH
中,这样你就可以在任何地方运行 MySQL 命令。
- 这行命令将 MySQL 5.7 的 bin 目录添加到环境变量
-
export PATH="/Library/Developer/CommandLineTools/usr/bin:$PATH"
- 这行命令将 macOS 命令行开发工具的 bin 目录添加到
PATH
,使得这些工具可以在终端中直接使用。
- 这行命令将 macOS 命令行开发工具的 bin 目录添加到
-
export PYENV_ROOT=/usr/local/bin/pyenv
- 设置
PYENV_ROOT
环境变量为/usr/local/bin/pyenv
,这是pyenv
的安装目录。
- 设置
-
export PATH="$PYENV_ROOT/bin:$PATH"
- 将
pyenv
的 bin 目录添加到PATH
,允许你在终端中直接运行pyenv
命令。
- 将
-
export PATH="$PYENV_ROOT/shims:$PATH"
- 将
pyenv
的 shims 目录添加到PATH
。shims 是pyenv
用来拦截 Python 命令并确保使用正确版本的 Python 的一种机制。
- 将
-
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
- 这行命令检查
pyenv
命令是否存在。如果存在,它将执行pyenv init -
命令,这是pyenv
的初始化脚本,用于配置当前 shell 会话。
- 这行命令检查
-
eval "$(pyenv init -)"
- 再次执行
pyenv init -
,这可能是重复的,除非有特殊的原因需要两次初始化。
- 再次执行
-
eval "$(pyenv virtualenv-init -)"
- 执行
pyenv virtualenv-init -
,这是pyenv
插件pyenv-virtualenv
的初始化脚本,用于支持虚拟环境的创建和管理。
- 执行
-
export PATH="/usr/local/opt/mysql@8.0/bin:$PATH"
- 将 MySQL 8.0 的 bin 目录添加到
PATH
。注意这行命令似乎缺少一个结束的双引号,这可能是一个错误。
- 将 MySQL 8.0 的 bin 目录添加到
-
export NVM_DIR="$HOME/.nvm"
- 设置
NVM_DIR
环境变量为你的主目录下的.nvm
目录,这是 Node Version Manager (nvm) 的配置目录。
- 设置
-
[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"
- 检查
nvm.sh
脚本是否存在并且文件大小不为零,如果是,就执行这个脚本。这个脚本初始化 nvm。
- 检查
-
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"
- 检查 nvm 的 bash 自动补全脚本是否存在并且文件大小不为零,如果是,就执行这个脚本。这个脚本提供了 nvm 命令的自动补全功能。
可以发现,第9行的命令是不完整的,因为它缺少一个双引号,修正后是
export PATH="/usr/local/opt/mysql@8.0/bin:$PATH"
而且eval "$(pyenv init -)"
出现了两次,需要删掉最后一次
出现问题
pyenv install -v x.x.x版本,说BUILD FAILED ,configure: error: in `/var/folders/4t/q8vsd83j12v34_1z9lv5_z040000gn/T/python-build.20240325204149.46990/Python-3.6.1’:
configure: error: C compiler cannot create executables
![[Pasted image 20240325204225.png]]
说C编译器无法创建可执行文件,错误信息建议查看config.log。
于是执行命令
cat config.log | grep error
![[Pasted image 20240325204624.png]]
报错说No such file or directory
猜想是,config.log
文件是在编译过程中生成的,这个编译目录是一个临时目录,可能在编译失败后被立即清理了。
于是一个终端重新运行安装python3.6.1的命令,
另一个终端cd到这个临时目录,然后再次执行cat命令,显示信息如下:
![[Pasted image 20240325204915.png]]
错误信息表明 编译器或链接器问题:错误信息中提到了 linker command failed with exit code 1
,这可能意味着链接器(ld)遇到了问题。检查是否有必要的库文件和链接器脚本。
clang: error: argument to ‘-V’ is missing (expected 1 value)
曾经尝试的解决方案:
重新安装xcode
sudo rm -rf /Library/Developer/Command Line Toolsxcode-select --install
這個問題主要是輸在 CLT 不支援 OS X 11 的關係,所以要更新一下,只需要在終端機輸入以下指令(很久要耐心等):
softwareupdate --all --install --force
一个超复杂的安装指令
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.0 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
还有一个差不多复杂的安装指令
CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include
-I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 3.7.1
还有如下:
![[Pasted image 20240325211826.png]]
都不行……
这篇关于仍未知那天的pyenv为什么崩掉的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!