首页 > 编程语言 >pyenv: python虚拟环境工具

pyenv: python虚拟环境工具

时间:2024-07-01 13:30:12浏览次数:21  
标签:virtualenv versions python pyenv 虚拟环境 PATH

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


0x0 安装配置pyenv和virturalenv插件

0x00 pyenv

  1. 准备安装目录:$HOME/.pyenv
  2. 下载pyenv项目
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  1. 配置环境变量
# 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插件

  1. 下载pyrnv-virtualenv项目
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
  1. 配置环境变量
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
  1. 重启shell
exec $SHELL

0x02 pyenv下载安装包速度

  1. 生成脚本工具文件夹:$HOME/tools/
  2. 创建脚本文件
#!/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  # 执行安装
  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

  1. 创建虚拟环境
# python3.6.6必须已经通过pyenv安装上了
# 基于python 3.6.6创建了名为myenv的虚拟环境
pyenv virtualenv 3.6.6 myenv
  1. 激活虚拟环境
# 激活了所创建了虚拟环境myenv,出现命令行首出现(myenv)
pyenv activate myenv
  1. 查看环境
pyenv version   #查看当前激活的python环境
pyrnv versions  #查看所有存在的python环境
  1. 删除虚拟环境
  • 删除文件
# 直接删除
$(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
  1. 为项目设置虚拟环境
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

相关文章

  • 《从零开始学Python》(第二版) PDF读书分享
    Python是一种面向对象、解释型计算机程序设计语言,由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。Python在设计上坚......
  • python sklearn机械学习模型-分类
    ......
  • window 下 pyenv 安装与使用
    安装GitHub上下载这个文件https://github.com/pyenv-win/pyenv-win点击这个下载到本地解压文件并且重命名为>pyenv并放置到合理位置添加环境变量...\pyenv-win\bin...\pyenv-win\shims添加完成之后执行如下命令验证pyenv--versionpyenv的基本命令查看支持的pyt......
  • 基于python的中风预测系统的设计与实现计算机毕设
    博主介绍:✌专注于VUE,小程序,安卓,Java,python,物联网专业,有16年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。目录研究的背景:研究或应用的意义:国外研究现状:国内研究现状:研究内容:预期目标及拟......
  • Python-venv
    Pythonvenv虚拟环境1.什么是pythonvenv虚拟环境?通常python安装的第三方包都会安装在python安装目录的site-packages目录下,此时,所有项目都使用共同的第三方包的版本;然而,经常多个项目可能会使用同一个包的不同版本,在这种情况下,各个项目可能需要各自拥有一套独立的Python运行环......
  • python还原最近爆火的游戏之杂交版植物大战僵尸
    导语:哈喽,哈喽~最近杂交版植物大战僵尸的人气可谓是爆涨,晃着脑袋生产阳光的向日葵,突突突⚾⚾⚾吐着子弹的豌豆射手!魔幻的玩法,奇怪的杂交植物,和姿势滑稽的僵尸​。玩一局下来真的是紧张又刺激!……印象最深的是“僵尸吃掉了你的脑子!”还有疯狂的戴夫,无一不唤醒着我们的童年记忆​......
  • Python-字符串
    字符串1.字符串字面量单引号:'spa"m'双引号:"spa'm"三引号:'''...spam...''',"""...spam..."""转义序列:"s\tp\na\0m"原始字符串:r"C:\new\test.spm"字节字面量:b'spx01a......
  • 什么是 Python 包管理器?怎么安装?
    Python包管理器是一个用于安装、升级、卸载和管理Python包的工具。Python的包(也称为模块或库)是预编写的Python代码,用于执行各种任务,如数据处理、网页开发、科学计算等。Python包管理器使得这些包的管理变得简单和高效。在Python中,最常用的包管理器是pip(pipinsta......
  • 全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
    全网最适合入门的面向对象编程教程:06类和对象的Python实现-自定义类的数据封装摘要:本文我们主要介绍了数据封装的基本概念和特性,如何设置自定义类的私有属性和私有方法,protect属性的概念和特点。往期推荐:学嵌入式的你,还不会面向对象??!全网最适合入门的面向对象编程教程:00......
  • python pyqt5学习记录(一)
    了解pyQt5:PyQt5是一个用于创建图形用户界面(GUI)应用程序的Python库。它是Python编程语言与Qt应用程序框架的绑定,允许开发人员使用Python语言来创建跨平台的桌面应用程序。Qt是一个功能强大且广泛使用的C++库,用于开发图形界面和应用程序功能。关于PyQt5的一些重要信息和功能:1.......