1、之前寫過(guò)一篇文章,介紹了pyenv的虛擬環(huán)境設(shè)置,比較好用,換新電腦后,pyenv install 2.7.15,無(wú)論怎么樣都出錯(cuò),放棄它了。
2、后來(lái)有個(gè)測(cè)開(kāi)給我介紹了一個(gè)pipenv,搜了一下,也挺好用。把安裝過(guò)程寫一下
首先pip install --user pipenv(我用的是brew install --user pipenv)
pip安裝在
/Users/yourname/Library/Python/2.7/lib/python/site-packages/pipenv
brew安裝在/usr/local/Cellar/pipenv
其實(shí),到這里,已經(jīng)安裝好了。
其實(shí)他的命令很簡(jiǎn)單
具體可以查看這里.
大概說(shuō)一下最核心的幾個(gè)命令
pipenv install 直接安裝pipfile和pipfile.lock兩個(gè)文件里面的內(nèi)容,創(chuàng)建的python版本也是pipfile里的版本。
首先它會(huì)校驗(yàn) pipfile 和 pipfile.lock 是不是一致,如果一致就直接裝 lock 里面的,如果不一致就先重新生成一份 lock 文件。
pipenv shell 進(jìn)入到虛擬python環(huán)境 exit 或者ctrl+d退出
cd到你的項(xiàng)目文件夾
然后pipenv --python 3.7 這里根據(jù)你的python版本換成2.7
至此,已經(jīng)建立好了一個(gè)pipenv的python環(huán)境。它的路徑是/Users/yourname/.local/share/virtualenvs/Invest_App_UITest-lKTIJBzo
然后,我用pycharm選擇pipenv的虛擬環(huán)境。官網(wǎng)有給出非常詳細(xì)的步驟 可以只看這里

實(shí)際操作截圖


這里有幾點(diǎn)需要注意:
1、pipenv excutable里面填/Users/name/.local/share/virtualenvs/Invest_App_UITest-lKTIJBzo/bin/python2.7
2、install packages from pipfile 可以不勾選
這樣應(yīng)該會(huì)創(chuàng)建一個(gè)空的pipenv環(huán)境
然后
pipenv install -r requirements.txt
樣我們可以重用之前的requirement.txt 文件來(lái)構(gòu)建我們新的開(kāi)發(fā)環(huán)境,可以把我們的項(xiàng)目順利的遷到pipenv。
如果出錯(cuò),可以把安裝出錯(cuò)的庫(kù)單獨(dú)找出來(lái)。
然后切到虛擬環(huán)境:pipenv shell
進(jìn)入到虛擬環(huán)境后,再安裝出錯(cuò)的庫(kù)。
直接用 pipenv install 會(huì)報(bào)錯(cuò), m2crypto 安裝的時(shí)候找不到 openssl。
用 pipenv shell 先切換到它的虛擬環(huán)境里面,再用下面這條命令就可以把 m2crypto 裝上。
LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" SWIG_FEATURES="-I$(brew --prefix openssl)/include" pip install m2crypto
然后查看依賴關(guān)系:pipenv graph
如果看到還有?的庫(kù),繼續(xù)安裝。
這樣就可以使用pipenv虛擬環(huán)境了。
刪除虛擬環(huán)境:
pipenv --rm
進(jìn)入虛擬環(huán)境
pipenv shell
退出虛擬環(huán)境
exit or Ctrl+D
安裝好虛擬環(huán)境,也能正常運(yùn)行,但是發(fā)現(xiàn)不能自動(dòng)切換python虛擬環(huán)境。于是找
發(fā)現(xiàn)https://github.com/pypa/pipenv/wiki/Run-pipenv-shell-automatically
這里有介紹,如何自動(dòng)進(jìn)入到python虛擬環(huán)境的文件夾時(shí),自動(dòng)切換到虛擬環(huán)境(也就是執(zhí)行pipenv shell)
具體做法:
function auto_pipenv_shell {
if [ ! -n "${PIPENV_ACTIVE+1}" ]; then
if [ -f "Pipfile" ] ; then
pipenv shell
fi
fi
}
function cd {
builtin cd "$@"
auto_pipenv_shell
}
auto_pipenv_shell
把這段內(nèi)容加到~/.zhsrc 然后加完之后,source ~/.zhsrc 退出終端,cd到配置了虛擬環(huán)境的文件夾,它會(huì)自動(dòng)切到python虛擬環(huán)境,但是返回上一層后,發(fā)現(xiàn)他沒(méi)有自動(dòng)退出。感覺(jué)不是很好用。
繼續(xù)找:autoenv
brew install autoenv # 安裝 autoenv
cd到你的配置了python虛擬環(huán)境的文件夾
執(zhí)行echo "pipenv shell" > .env 當(dāng)然你也可以通過(guò)vi操作
# bash 的話,執(zhí)行這一條指令
echo "source `which activate.sh`" >> ~/.bashrc
# zsh 的話,執(zhí)行這一條指令
echo "source `/usr/local/Cellar/autoenv/0.2.1/activate.sh`" >> ~/.zshrc
或者直接在~/.zshrc加source /usr/local/Cellar/autoenv/0.2.1/activate.sh
source ~/.zshrc 退出終端,然后cd到目標(biāo)文件夾。如果是第一次,系統(tǒng)會(huì)提示你確認(rèn)是否以后都自動(dòng)激活,輸入 y ,然后回車確認(rèn)即可。
但是發(fā)現(xiàn),這里cd到其他文件夾,也還是停留在python虛擬環(huán)境,沒(méi)有自動(dòng)退出,方案也不夠完美。
這里主要參考[Python]使用pipenv管理python虛擬環(huán)境和懶人神器 autoenv
后來(lái)有人介紹一個(gè)據(jù)說(shuō),可以退出文件夾后,自動(dòng)關(guān)閉python虛擬環(huán)境的。
Autoswitch Python Virtualenv
我的是oh-my-zsh
所以,我直接安裝文檔安裝:
git clone "https://github.com/MichaelAquilina/zsh-autoswitch-virtualenv.git" "$ZSH_CUSTOM/plugins/autoswitch_virtualenv"
把代碼放到了/Users/name/.oh-my-zsh/custom/plugins/autoswitch_virtualenv
然后在
~/.zshrc加

plugins=(autoswitch_virtualenv $plugins)
在~/.bash_profile加

export AUTOSWITCH_VIRTUAL_ENV_DIR=$HOME/.local/share/virtualenvs
然后source ~/.bash_profile
source ~/.zshrc
發(fā)現(xiàn)有提示

輸入mkenv后,發(fā)現(xiàn)自動(dòng)安裝了python 3.7
而且提示要安裝requirement.txt
感覺(jué)和pipenv是不一樣的東西,是一個(gè)獨(dú)立的配置虛擬環(huán)境的工具。沒(méi)有和pipenv搭配使用,但是我的使用場(chǎng)景大部分是在pycharm,pycharm支持pipenv,所以,還是以pipenv為主,所以這個(gè)工具也放棄。
但是它有一個(gè)好處,cd到其他文件夾時(shí),自動(dòng)關(guān)閉python虛擬環(huán)境,和pyenv一樣,很好用。
以上說(shuō)的都作廢,后來(lái)重啟終端,可以識(shí)別pipenv環(huán)境。
所以我又恢復(fù),但是恢復(fù)后,發(fā)現(xiàn)還是不行,一直報(bào)下面截圖的錯(cuò)。

找了好久原因,終于知道了。參考這里

我把source ~/.bash_profile發(fā)到plugins前面去了

解決問(wèn)題。
但是依然提示

暫時(shí)還沒(méi)找到解決方法。先將就用