pyenv、虚拟环境 on macos和linux
Install pyenv on linux and macos
linux
Install - 使用git安装pyenv
clone pyenv repo 到 ~/.pyenv 。
git clone --depth git@github.com:pyenv/pyenv.git ~/.pyenv
配置
- Tips: 要增加
pyenv init --path这条命令,以便PATH中加上python的路径。官方文档中没提到,配置了以后,总是找不到python。- 参考
~/.pyenv/libexec/pyenv-init和pyenv-init --help。
- 参考
在 .bashrc 中增加下面的内容。这里装的是3.8.11的版本。
#vim ~/.bashrc export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init --path)" eval "$(pyenv init -)" fi export VIRTUALENVWRAPPER_PYTHON=/home/albert/.pyenv/versions/3.8.11/bin/python export WORKON_HOME=$HOME/.virtualenvs source /home/albert/.pyenv/versions/3.8.11/bin/virtualenvwrapper.sh
macos
Install - homebrew安装pyenv
brew install pyenv
我用的是zsh,以下按zsh配置:
# 查看当前使用的shell $echo $SHELL /bin/zsh
PYENV_ROOT 是pyenv的安装目录,因为是homebrew安装的,所以在 /usr/local/var/pyenv 。如果是 git clone 安装的,=PYENV_ROOT= 配置为clone的目录,如 $HOME/.pyenv 。
# vim ~/.zshrc if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi export PYENV_ROOT=/usr/local/var/pyenv
查看当前激活的是哪个版本的Python
$pyenv version 3.5.3 (set by /Users/albert/.python-version)
查看已经安装了哪些版本的python
$pyenv versions system * 3.5.3 (set by /Users/albert/.python-version)
显示当前python安装路径
$pyenv which python /usr/local/var/pyenv/versions/3.5.3/bin/python
配置
在 ~/.zshrc 中增加下面的内容:
#vim ~/.zshrc if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi export PYENV_ROOT=/usr/local/var/pyenv export PATH="$PYENV_ROOT/bin:$PATH" export VIRTUALENVWRAPPER_PYTHON=/usr/local/var/pyenv/versions/3.5.3/bin/python export WORKON_HOME=$HOME/.virtualenvs # source /usr/local/var/pyenv/shims/virtualenvwrapper.sh source /usr/local/var/pyenv/versions/3.5.3/bin/virtualenvwrapper.sh
使用pyenv
安装指定版本python
pyenv只能管理通过 pyenv install 安装的python版本和系统自带的版本。
pyenv install 3.5.3 # 安装完成后必须rehash pyenv rehash
设置使用哪个python版本
系统全局用系统默认的Python比较好,不建议直接对其操作。
pyenv global system
用local进行指定版本切换,一般开发环境使用。
pyenv local 3.5.3
对当前用户的临时设定Python版本,退出后失效
pyenv shell 3.5.3
取消某版本切换
pyenv local 3.5.3 --unset
- 优先级关系:shell —> local —> global
虚拟环境
virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:
- 在没有权限的情况下安装新套件
- 不同应用可以使用不同的套件版本
- 套件升级不影响其他应用
Virtaulenvwrapper 是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
- 将所有虚拟环境整合在一个目录下
- 管理(新增,删除,复制)虚拟环境
- 切换虚拟环境
安装和使用方法
安装
pip install virtualenv pip install virtualenvwrapper
创建虚拟环境
mkvirtualenv [虚拟环境名称]
此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行。
创建目录用来存放虚拟环境 先在HOME目录下创建虚拟环境使用的目录。
mkdir $HOME/.virtualenvs# 在 .zshrc 追加两行 export WORKON_HOME=$HOME/.virtualenvs # 指定虚拟环境使用的python,否则会使用macos系统自带的python导致报错。 export VIRTUALENVWRAPPER_PYTHON=/usr/local/var/pyenv/versions/3.5.3/bin/python # brew安装的python在 /usr/local/bin 下面没有virtualenvwrapper.sh,只能用pyenv安装的python3.5.3下的了。 # source /usr/local/bin/virtualenvwrapper.sh source /usr/local/var/pyenv/versions/3.5.3/bin/virtualenvwrapper.sh 运行: source ~/.zshrc
此时virtualenvwrapper就可以使用了。
创建虚拟环境 - mkvirtualenv
在当前的环境的Python版本下创建名称为 blog_10 的虚拟环境。
mkvirtualenv blog_10
默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 –no-site-packages建立虚拟环境
例如:
mkvirtualenv --no-site-packages [虚拟环境名称] mkvirtualenv --no-site-packages blog_10
查看创建的虚拟环境 - lsvirtualenv
[albert@MacBookAir /Users/albert]
$lsvirtualenv
blog_10
=======
启动某虚拟环境 - workon
# workon [虚拟环境名称] $workon blog_10 [albert@MacBookAir /Users/albert] $which python /usr/local/var/pyenv/shims/python [albert@MacBookAir /Users/albert] $python -V Python 3.5.3 [albert@MacBookAir /Users/albert] $workon blog_10 (blog_10) [albert@MacBookAir /Users/albert] $lsvirtualenv blog_10 =======
删除虚拟环境 - rmvirtualenv
rmvirtualenv [虚拟环境的名字]
$rmvirtualenv blog_10
需要说明的是,无法在虚拟环境中删除虚拟环境,要先退出虚拟环境才行。
退出虚拟环境 - deactivate
在虚拟环境中使用deactivate则退出了虚拟环境,只有就可以删除虚拟环境了。
deactivate
注意: pyenv virtualenv 命令和 mkvirtualenv 命令创建的虚拟环境是无法互相使用的,也就是说 pyenv virtualenv 命令创建的虚拟环境无法被 workon 命令识别,同样的 mkvirtualenv 命令创建的虚拟环境也无法被 pyenv versions 等命令识别。
使用流程
source ~/.zshrc albert@MacBookAir ~ % source ~/.zshrc # 未使用虚拟环境 [albert@MacBookAir /Users/albert] $pyenv versions system * 3.5.3 (set by /Users/albert/.python-version) [albert@MacBookAir /Users/albert] $pyenv local 3.5.3 [albert@MacBookAir /Users/albert] $pyenv shell pyenv: no shell-specific version configured [albert@MacBookAir /Users/albert] $pyenv global system [albert@MacBookAir /Users/albert] $which python;python -V /usr/bin/python Python 2.7.16 # 使用 blog_10 虚拟环境 [albert@MacBookAir /Users/albert] $workon blog_10 (blog_10) [albert@MacBookAir /Users/albert] $which python;python -V /Users/albert/.virtualenvs/blog_10/bin/python Python 3.5.3 (blog_10) [albert@MacBookAir /Users/albert] # 退出 blog_10 虚拟环境 $deactivate [albert@MacBookAir /Users/albert] $which python;python -V /usr/bin/python Python 2.7.16 [albert@MacBookAir /Users/albert] $pyenv global system [albert@MacBookAir /Users/albert] $pyenv local 3.5.3 [albert@MacBookAir /Users/albert] $pyenv shell pyenv: no shell-specific version configured
emacs
M-x pyvenv-workon
关闭lsp-headerline-breadcrumb-mode
在 lsp-mode.el 中,从 t 改为 nil 。
(defcustom lsp-headerline-breadcrumb-enable nil )
pyright配置
在项目root directory下新建 pyrightconfig.json 文件,指定虚拟环境的路径和虚拟环境的名字。这样emacs在打开项目下的文件时能自动初始化虚拟环境,不需要手工在emacs中激活对应的虚拟环境,lsp-mode可以直接使用正确的虚拟环境。
{
"venvPath": "/Users/albert/.virtualenvs/",
"venv": "pandas"
}
参考
- Mac多Python版本共存,多个独立Python开发环境切换 https://blog.csdn.net/u010670689/article/details/74906766
- Mac配置Python开发环境之virtualenvwrapper https://www.jianshu.com/p/83ab5947bc7e