Mac中pyenv的安裝與使用教程
前言
pyenv 可在不同 python 版本之間輕松切換,實(shí)現(xiàn) python 環(huán)境隔離,且支持自動激活和退出虛擬環(huán)境
一、pyenv
1、安裝
方式一:Git Clone
git clone git://github.com/pyenv/pyenv.git ~/.pyenv
bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc exec $SHELL -l
zsh
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc exec $SHELL -l
方式二:Homebrew
安裝
brew install pyenv
根據(jù)自身環(huán)境,將下方內(nèi)容加到對應(yīng)文件中: .bashrc / .zshrc
export PYENV_ROOT=/usr/local/var/pyenv export PATH="$PYENV_ROOT/bin:$PATH" export PATH="$PYENV_ROOT/shims:$PATH" if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
2、驗(yàn)證
驗(yàn)證安裝是否成功:
pyenv
3、使用
基本使用
命令 | 描述 |
---|---|
pyenv --version | 查看 pyenv 的版本 |
pyenv versions | 羅列當(dāng)前已安裝的所有 python 環(huán)境,如果是當(dāng)前正在使用的環(huán)境,則前面會有個(gè) * |
pyenv help | 查看幫助 |
pyenv init | 如果輸入 pyenv 之后使用 tab 不補(bǔ)全,可以使用該命令進(jìn)行初始即可使用補(bǔ)全命令 |
安裝環(huán)境
命令 | 描述 |
---|---|
pyenv install -l | 顯示可以安裝的版本列表 |
pyenv install 版本號 | 安裝指定版本的 python |
pyenv rehash | 更新本地?cái)?shù)據(jù)庫,安裝指定版本的 python 后使用 |
環(huán)境應(yīng)用
命令 | 描述 |
---|---|
pyenv global 版本號 | 更改本機(jī)版本,重啟不會造成再次更改 |
pyenv local 版本號 | 會在當(dāng)前目錄創(chuàng)建 .python-version 文件,并記錄設(shè)置的 python 環(huán)境,每次進(jìn)入該目錄會自動設(shè)置成該 python 環(huán)境 |
pyenv shell 版本號 | 更改當(dāng)前 shell 下使用的 python 版本,臨時(shí)生效,優(yōu)先級高于 global |
二、virtualenv插件
1、安裝
方式一:Git Clone
cd .pyenv/plugins git clone https://github.com/pyenv/pyenv-virtualenv.git # 安裝virtualenv插件
方式二:Homebrew
brew install pyenv-virtualenv
2、配置
無論使用上述的哪種方式進(jìn)行的安裝,請根據(jù)自身環(huán)境,將下方內(nèi)容加到對應(yīng)文件中: .bashrc / .zshrc
eval "$(pyenv virtualenv-init -)"
3、使用
基本使用
命令 | 描述 |
---|---|
pyenv virtualenv 3.8.3 env383 | 創(chuàng)建 3.8.3 版本虛擬環(huán)境 |
pyenv virtualenvs | 顯示環(huán)境 |
pyenv activate env383 | 激活使用指定的虛擬環(huán)境 |
pyenv deactivate | 退出當(dāng)前虛擬環(huán)境 |
rm -rf .pyenv/versions/3.8.3 | 刪除版本環(huán)境 |
rm -rf .pyenv/versions/env383 | 刪除虛擬環(huán)境 |
自動激活和退出虛擬環(huán)境
在需要使用虛擬環(huán)境的目錄(通常是項(xiàng)目目錄)中:
- 建立一個(gè) .python-version 的文本文件
- 將虛擬環(huán)境名稱(如 env383 )寫在里面
之后每次進(jìn)/出該目錄時(shí),虛擬環(huán)境都將自動激活/退出。
三、報(bào)錯(cuò)
1、激活指定的虛擬環(huán)境時(shí)報(bào)錯(cuò)
# 命令 pyenv activate env383 # 報(bào)錯(cuò)信息 Failed to activate virtualenv. Perhaps pyenv-virtualenv has not been loaded into your shell properly. Please restart current shell and try again.
別慌,重啟你的終端,或者執(zhí)行如下命令即可
exec $SHELL -l
2、還是系統(tǒng)版本
如果你用 pyenv versions 查看,明明已經(jīng)切換成功,但是用 python -V卻還是系統(tǒng)版本。
原因是 pyenv沒有加到 $PATH環(huán)境變量里去,解決辦法如下:
export PYENV_ROOT=~/.pyenv export PATH=$PYENV_ROOT/shims:$PATH
3、安裝 python報(bào)錯(cuò)
安裝 python報(bào)錯(cuò),如
pyenv install 3.8.3
報(bào)錯(cuò)內(nèi)容:
python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.8.3.tar.xz... -> https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz Installing Python-3.8.3... python-build: use readline from homebrew python-build: use zlib from xcode sdk BUILD FAILED (OS X 12.0.1 using python-build 20180424) Inspect or clean up the working tree at /var/folders/cy/8zkx5hys2tsgb1d_x42_r8qc0000gn/T/python-build.20220122174148.1531 Results logged to /var/folders/cy/8zkx5hys2tsgb1d_x42_r8qc0000gn/T/python-build.20220122174148.1531.log Last 10 log lines: clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -I./Include/internal -I. -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/var/pyenv/versions/3.8.3/include -I/usr/local/opt/sqlite/include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/var/pyenv/versions/3.8.3/include -I/usr/local/opt/sqlite/include -DPy_BUILD_CORE_BUILTIN -c ./Modules/_codecsmodule.c -o Modules/_codecsmodule.o clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -I./Include/internal -I. -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/var/pyenv/versions/3.8.3/include -I/usr/local/opt/sqlite/include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/var/pyenv/versions/3.8.3/include -I/usr/local/opt/sqlite/include -DPy_BUILD_CORE_BUILTIN -c ./Modules/_weakref.c -o Modules/_weakref.o ./Modules/posixmodule.c:9221:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration] ret = sendfile(in, out, offset, &sbytes, &sf, flags); ^ clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -I./Include/internal -I. -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/var/pyenv/versions/3.8.3/include -I/usr/local/opt/sqlite/include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/usr/local/var/pyenv/versions/3.8.3/include -I/usr/local/opt/sqlite/include -DPy_BUILD_CORE_BUILTIN -DPy_BUILD_CORE_BUILTIN -I./Include/internal -c ./Modules/_functoolsmodule.c -o Modules/_functoolsmodule.o 1 error generated. make: *** [Modules/posixmodule.o] Error 1 make: *** Waiting for unfinished jobs.... 1 warning generated.
使用下面的命令安裝即可,注意修改成相應(yīng)的版本號
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.8.3 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
四、注意
- 安裝好的版本不做任何修改,我們只操作虛擬環(huán)境,如 env383
- 可以通過版本來多個(gè)虛擬環(huán)境,如 env383_1、env383_2
- 導(dǎo)出當(dāng)前環(huán)境的依賴庫: pip freeze > requirements.txt
- 導(dǎo)入依賴庫到當(dāng)前環(huán)境: pip install -r requirements.txt
五、相關(guān)知識
5.1、pyenv能做什么
1,基于每個(gè)用戶更改全局Python版本
2,對每個(gè)項(xiàng)目的Python版本提供支持
3,允許通過環(huán)境變量覆蓋Python版本
4,一次搜索多個(gè)版本的Python
5.2、pyenv運(yùn)行
在一個(gè)高的級別上,pyenv使用shim可執(zhí)行文件注入到PATH來攔截Python命令;確定您的應(yīng)用程序指定了哪個(gè)Python版本,并將命令傳遞給正確的已安裝Python版本。
5.3、PATH
當(dāng)運(yùn)行諸如python或pip等命令時(shí),操作系統(tǒng)將在目錄列表中搜索以查找具有該名稱的可執(zhí)行文件。此目錄列表位于一個(gè)名為PATH的環(huán)境變量中,列表中的每個(gè)目錄都用冒號分隔:
/usr/local/bin:/usr/bin:/bin
PATH從左到右搜索目錄,因此列表開頭目錄中的匹配可執(zhí)行文件優(yōu)先于結(jié)尾目錄中的另一個(gè)可執(zhí)行文件。在這個(gè)例子中, /usr/local/bin目錄將被搜索的第一個(gè),然后是/usr/bin,然后是/bin。
5.4、shims
pyenv通過在你的PATH前插入shims目錄來工作:
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
Shim是輕量級的可執(zhí)行文件,它們只是將命令傳遞給pyenv。因此在安裝了pyenv的情況下,運(yùn)行pip時(shí)操作系統(tǒng)將執(zhí)行以下操作:
1,在PATH中搜索名稱為pip的可執(zhí)行文件
2,在PATH開頭的shims目錄中,找到名稱為pip的shim文件
3,運(yùn)行名稱為pip的shime文件,shime將命令傳遞給pyenv
總結(jié)
到此這篇關(guān)于Mac中pyenv的安裝與使用的文章就介紹到這了,更多相關(guān)Mac pyenv安裝使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django 實(shí)現(xiàn)電子支付功能的示例代碼
這篇文章主要介紹了django 實(shí)現(xiàn)電子支付功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07python機(jī)器學(xué)習(xí)之隨機(jī)森林(七)
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)之隨機(jī)森林,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03python編程中簡潔優(yōu)雅的推導(dǎo)式示例詳解
這篇文章主要為大家介紹了python編程中簡潔優(yōu)雅的推導(dǎo)式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11python 返回一個(gè)列表中第二大的數(shù)方法
今天小編就為大家分享一篇python 返回一個(gè)列表中第二大的數(shù)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07