python 多版本共存、venv的使用和修改

看这篇文章之前你需要了解的

在Windows下推荐Anaconda,Linux和Mac下推荐Miniconda,如果不是因为不明原因它们工作不良的话请用这两个工具套装来管理python!不要直接裸装python环境!

conda虽说其自身的缺陷,但绝对比白板装python要方便得多,你甚至可以只把它单纯只当做是python版本管理器而不管其他功能。

本文只是介绍如果你不得不用python的话可以用什么方式管理多个虚拟环境,事实上你会发现这很麻烦。

环境

本文讨论linux环境下源码安装python的情况,如果你是在windows会略有区别但区别不大,相信本文看完后一样会有所收获。本文默认你已经了解了linux系统的一些基本操作如进入文件夹、删除等,以及python的基本使用。不懂的可以自行百度。

主要区别有:

  • windows可以方便地进行图形界面化的安装,因此选择安装目录并安装多个python版本不是什么大问题,给python.exe改名就可以实现共存了
  • venv在windows环境生成的是.bat文件,位置在Scripts文件夹中。需要修改的文件是activate.batdeactivate.bat

没看懂我在说什么的没关系,往下我还会重新提到在windows环境的操作

为什么要安装多个python版本

很多库(我说的就是tensorflow)经常有新版本不兼容旧版本代码的现象,因此即使python的语法能做到前后版本兼容(我是说python3,先不提2),我们也经常需要同时安装好多个tensorflow的版本。

问题就这了:tensorflow的老版本不愿意支持最新版本的python,比如这个tensorflow的1.10.1版本
在这里插入图片描述
最新就支持到python3.6,注意这个更新时间在2018年,也就是说在18年之后我们新买的机器装上python3.7了,甚至3.8了(有时候你会喜欢新特性不是吗),这玩意已经不支持了,才过2年的代码就跑不了了(本文写于2020年)!这时候你需要python3.6。

源码安装python

python官网下载各个版本的python源码,瞧准要下的源码右键复制地址就行,然后随你喜欢用wget,curl或者其他东西下载,随意,例如:

wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz

下载之后解压,我这里下载的是tgz的源码,所以

tar -zxvf Python-3.8.2.tgz

进到解压出来的文件夹里,然后三连

./configure
make
sudo make install

如果要自定义安装目录,可以加--prefix编译选项

./configure --prefix /usr/local/lib/python38

其他版本的按类似方法搞就可以啦,重命名成相应的版本号。我这里直接用38,少打个点省事。
在环境里添加软连接,或者说linux版的快捷方式,以便直接调用:

sudo ln -s /usr/local/lib/python38/bin/python3 /usr/local/bin/python3
sudo ln -s /usr/local/lib/python38/bin/python3 /usr/local/bin/python38

类似地设置好其他版本的软连接,我建议把最新版本的python设置成python3,各个版本再设置python3n的软连接,默认的python是python2.7

windows安装多版本python

python官网找到要下的版本,拉到最下面下载Windows x86-64 executable installer就好啦
在这里插入图片描述
安装记得自定义安装目录,添加环境变量,安装结束之后把各个安装目录里的python.exe改好名

pip的使用

由于多个python版本共存的原因,如果你懒得单独给每个pip设置软连接,那以后就不要图省事了:

python38 -m pip install --upgrade pip

linux环境默认安装的python没有pip的问题(20200418增加)

sudo easy_install pip

使用这个命令应该可以解决这个问题(至少我这里解决了)。

venv的使用

类似pip,如下代码:

python38 -m venv test

将在当前目录下创建一个虚拟的python环境的文件夹,版本是python3.8,环境名为test,文件夹里是python3.8的解释器和标准库。
在这里插入图片描述
我推荐的使用方式是在你的项目里专门为这个项目创建虚拟环境,环境直接保存在项目文件夹里,省事。
启动这个虚拟环境的方法:

source ./test/bin/activate

在这里插入图片描述
在这里只有一个python的版本,就是你所选择的那个版本,所有用到的第三方库都需要重新安装,也因此不必担心原来环境的兼容问题,玩坏了直接删掉这个文件夹重来就行,非常方便。
关闭虚拟环境有两个方法:要么直接关掉这个termianl,要么用这个命令:

deactivate

就可以了。你甚至可以输入一半用tab补全。

windows下venv的创建和使用

创建和linux环境下毫无区别,也可以用一样的方式使用,只是不需要用source命令调用了,直接运行activate就可以。注意路径里的/要改成\
windows多了一种使用方式:调用activate.batdeactivate.bat,它们和activate都在虚拟环境文件夹的在Scripts文件夹里

对activate和deactivate的修改

有时我们安装的第三方包(又是你,tensorflow)会需要gpu(tensorflow-gpu)或者其他非python的支持,例如:
在这里插入图片描述
可以看到不同版本的tensorflow需要不同版本的cuda和cudnn支持,我们希望在activate的时候顺便把cuda和cudnn的版本一起改了,deactivate的时候再改回来。有时我们会遇到更复杂的需求,想要在activate和deactivate的时候同时运行一些东西。以下以修改cuda和cudnn版本为例。

cuda和cudnn版本的修改

更改cuda和cudnn版本需要做的就是删除cuda的默认软连接再重新创建一个指向正确版本的软连接,cudnn和cuda是配套绑定在一起的,其本身就在cuda的文件夹里。例如更改为10.0版本的cuda:

sudo rm /usr/local/cuda
sudo /usr/local/cuda-10.0 /usr/local/cuda

修改回10.1版本用一样的手法就可以

sudo rm /usr/local/cuda
sudo /usr/local/cuda-10.1 /usr/local/cuda

source命令解读和venv脚本修改思路

sourcesh其实是一样的命令,都是执行shell脚本。区别在于sh命令是新建一个子shell并复制父shell的状态,随后的命令都在子shell中运行,因此对父shell没什么影响,而source则是直接在当前脚本运行。这就是二者唯一的区别(先这么理解就好,因为我不知道有没有别的区别)。

经常执行命令需要root权限,如果我们把需要root权限的命令写入了脚本,如修改cuda和cudnn的命令(/usr/local的改动需要root权限),则需要sudo或者切换到root用户。于是在执行下面这个命令的时候

sudo source test/bin/activate

出现了如下报错
在这里插入图片描述
这是由于source是bash内置的命令,不是shell命令。切换到root用户之后不需要用sudo因此可以解决问题,但是我不想这么做。

其实解决方式非常简单,就是直接在脚本里需要root权限的命令前加sudo,运行时就不需要sudo了,虽然仍然需要输入一次密码。

有了如上知识,venv的activate脚本的修改思路也就很清晰了:直接在最后面加上需要运行的命令就好。

deactivate的修改

我们来看代码
在这里插入图片描述
观察到:deactivate其实是activate里定义的函数,因此直接把命令插入到33行下面,函数内部就好。如此,虚拟环境激活和停止的额外命令添加问题基本解决。

windows下的区别

windows下运行activate实际上是调用的activate.batdeactivate也是调用了deactivate.bat,因此直接在activate.batdeactivate.bat修改就好了。
下面的都是activate调用两个bat文件的证明了,不想看的跳过就好。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中有三种常用的虚拟环境管理工具,分别是virtualenv、venv和conda。其中,venvPython自带的虚拟环境管理器,而virtualenv则是一个第三方库,而conda则是一个独立的虚拟环境和包管理工具。 引用中提到了如何使用virtualenv和venv创建虚拟环境,并且可以通过指定不同的Python解释器来控制虚拟环境中的Python版本。这对于需要在不同的Python版本之间切换的开发者来说非常有用。 引用中指出了conda相比于virtualenv/venv的一个重要优势,即在使用conda时,虚拟环境中的Python版本不受系统Python版本的限制。这意味着可以在同一台机器上同时使用不同版本Python,而不会相互冲突。 引用中对venv和conda进行了比较,指出了它们的一些区别。venv是一个虚拟环境管理器,而pip是一个包管理器,而conda则结合了两者的功能。虽然conda的包管理器功能相对较弱,大多数时候还是使用pip来安装包。但是,conda可以安装一些非Python的工具软件,而pip只能安装Python的包。此外,conda的虚拟环境管理功能相对较好,允许多个项目共享一个虚拟环境,并且虚拟环境是独立于操作系统解释器环境的,不受操作系统解释器版本的限制。 总结起来,虚拟环境管理工具venv和virtualenv主要用于创建和管理Python虚拟环境,而conda则更强大一些,除了可以创建和管理虚拟环境外,还可以安装非Python的工具软件,并且不受系统Python版本的限制。具体选择哪种工具可以根据具体的需求和项目特点进行选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python3基础知识复习 -- 虚拟环境(conda VS venv)](https://blog.csdn.net/peanutfish/article/details/125023770)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值