提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
0x0 安装配置pyenv和virturalenv插件
0x00 pyenv
- 准备安装目录:$HOME/.pyenv
- 下载pyenv项目
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- 配置环境变量
# centos
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
# macos
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
0x01 pyenv-virtualenv插件
- 下载pyrnv-virtualenv项目
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
- 配置环境变量
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
- 重启shell
exec $SHELL
0x02 pyenv下载安装包速度
- 生成脚本工具文件夹:$HOME/tools/
- 创建脚本文件
#!/bin/bash
cache="$HOME/.pyenv/cache"
pypack="Python-$1.tar.xz"
if [ ! -d "$cache" ]; then # 如果不存在此目录,创建
mkdir $cache
fi
if [ ! -f "$cache/$pypack" ]; then # 如果不存在 Python 安装包,就用 wget 下载
wget -P $cache https://npm.taobao.org/mirrors/python/$1/$pypack
# `wget -P dir url` 表示将 url 指向的内容下载到 dir 目录下
else
printf "\033[1;33m$cache/$pypack is existed.\033[0m\n" # 提示语
fi
pyenv install $1 # 执行安装
- 配置环境变量
vim $HOME/tools/pyenv-install
# 复制上述代码,wq 保存退出
chmod 777 $HOME/tools/pyenv-install # 修改权限
echo "export PATH=$HOME/tools:$PATH" >> ~/.bashrc # 添加环境变量
source ~/.bashrc
pyenv install --list # 查看可以下载的python版本
# 现在可以用 pyenv-install 命令下载安装 python 了
(root) $ pyenv-install 3.6.6
0x1 使用pyenv
- 创建虚拟环境
# python3.6.6必须已经通过pyenv安装上了
# 基于python 3.6.6创建了名为myenv的虚拟环境
pyenv virtualenv 3.6.6 myenv
- 激活虚拟环境
# 激活了所创建了虚拟环境myenv,出现命令行首出现(myenv)
pyenv activate myenv
- 查看环境
pyenv version #查看当前激活的python环境
pyrnv versions #查看所有存在的python环境
- 删除虚拟环境
- 删除文件
# 直接删除
$(pyenv root)/versions和$(pyenv root)/versions/{version}/envs中指定的文件
# 例子
若要删除虚拟环境my-env,则需删除$(pyenv root)/versions下的my-env文件夹
此外,由于虚拟环境是基于python 3.6.6创建的,因此还需要到$(pyenv root)/versions/3.6.6/envs删除文件夹my-env
- 使用uninstall删除
pyenv uninstall my-env
- 使用virtualenv-delete删除
pyenv virtualenv-delete my-env
- 为项目设置虚拟环境
cd ~/test #进入项目test的目录
pyenv local myenv #把项目的python环境设置为所创建的myenv,
#test目录下生成了隐藏文件.python-version,
#文件中记录了当前项目所使用的python环境:myenv
#此隐藏文件的作用是每当进入test目录,则激活环境myenv
0x2 卸载pyenv
由于 pyenv 把一切都放在 ~/.pyenv 下了,卸载仅需执行以下两步:
# 1.首先你需要删除环境变量
# 2.然后执行以下两条命令中的任意一条都可以
rm -rf ~/.pyenv
rm -rf $(pyenv root)
0x3 pyenv配置问题
0x30 问题描述
pyenv正常安装(可以正常执行pyenv versions),pyenv的virtualenv插件正常安装(可以成功创建、激活、反激活虚拟环境)首先创建并激活虚拟环境myenv01,进入项目文件夹test后,执行pyenv local myenv01.命令行提示字符前出现(myenv01)说明激活虚拟环境成功;退出test文件夹后,此标志消失,说明pyenv local命令没有问题。重新进入test,执行python --version查看test下使用的python版本是否为myenv01所基于的版本。结果发现不是,仍然是系统的python版本。
0x31 debug
pyenv的原理:.pyenv目录下维护着各种python版本及基于它们的虚拟环境。pyenv的核心是shim,利用pyenv安装了某个版本的python,则生成一个shim。pyenv用shim截获,系统在环境变量$PATH
中搜索的过程,让shims目录下的python先于系统原有的python而被找到,一旦找到,系统会停止搜索。举个例子$PATH=/home/cg/.pyenv/shims:/usr/local/bin
。假设skims目录下有3.8.0版本的python,bin目录下安装着
3.6.5版本的python,那么执行python命令时,系统扫描$PATH
,从左到右,先得到路径skims,发现在其中找到了所执行的python命令可执行文件,那么停止搜索,将使用skims目录下的文件。
0x32 problem
$PATH
中不但有重复的路径,还使得缺乏shim目录。正确的情况应当是shim目录位于系统python的安装目录之前。这样pyenv所管理的python版本将能够被优先扫描识别出来,从而成功切换到指定版本的python。
0x33 复现
# 问题描述
$ pyenv-insatll 3.8.0
$ pyenv virtualenv 3.8.0 myenv01
$ mkdir test && cd test
$ pyenv activate myenv01
(myenv01) $ python -V
bash: python: command not found...
# 问题分析
未能在当前环境中找到python解释器,应当把pyenv用于维护各个版本python的shims文件夹加入环境中
# 处理
$ echo "export PATH=$PATH:/home/cg/.pyenv/shims" >> ~/.bashrc
0x4 补充
0x40 windows的python虚拟环境方案
0x400 pyenv-win
# 默认就安装在当前路径的.pyenv下,
pip install pyenv-win --target=xxx/.pyenv
# 设置环境变量
PYENV_HOME=xxx/.pyenv/pyenv-win/
用户path追加:%PYENV_HOME%\shims
用户path追加:%PYENV_HOME%\bin
# 列出可以安装的python版本
pyenv install --list
# 安装指定python版本
pyenv install 3.8.2
# 设置pyenv的全局版本
pyenv global 3.8.2
# 为项目文件设置局部python版本
cd xx/project
pyenv local 3.8.2 # 创建xx/project/.python-version文件
# 一定要rehash一下
pyenv rehash
# 查看已经安装好的python版本
pyenv versions
0x401 virtualenv
# linux中的virtualenv是pyenv的一个插件,win中的virtualenv相对pyenv-win独立。
pip install virtualenv
# 为项目创建虚拟环境
cd xx\project
virtualenv -p xxx\python.exe my_env # 指定编译器创建虚拟环境,生成xx/project/my_env文件夹
.\my_env\Scripts\activate # 激活虚拟环境
deactivate # 反激活虚拟环境
0x41 迁移虚拟环境
尚未验证,谨慎参考
# 查看链接类型(符号链接/硬链接)
ll
# 以l开头的是软链接
# 以-开头的是硬链接
# 修改$PYENVROOT/versions下的软连接
ln -s /home/chengang03/.pyenv/versions/2.7.15/envs/pontus-dev pontus-dev
ln -s /home/chengang03/.pyenv/versions/3.7.11/envs/aether aether
ln -s /home/chengang03/.pyenv/versions/3.8.0/envs/pontus-38 pontus-38
ln -s /home/chengang03/.pyenv/versions/3.8.0/envs/torch-dev torch-dev
ln -s /home/chengang03/.pyenv/versions/3.8.0/envs/myenv01 myenv01
# 修改$PYENVROOT/versions/版本号/envs/虚拟环境名/bin下的软链接
ln -s /home/chengang03/.pyenv/versions/3.8.0/bin/python3.8 python3.8
ln -s /home/chengang03/.pyenv/versions/3.8.0/envs/torch-dev torch-dev
标签:virtualenv,versions,python,pyenv,虚拟环境,PATH From: https://blog.csdn.net/backlash321/article/details/140097873