使用virtualenv或virtualenvwrapper创建Python虚拟环境

一、 virtualenv

virtualenv 是目前最流行的 python 虚拟环境配置工具。它不仅同时支持 python2 和 python3,而且可以为每个虚拟环境指定 python 解释器,并可以选择继承基础版本的包。

virtualenv 可以说是 venv 的增强版本,不过早在 venv 出现之前,virtualenv 就算是最受欢迎的命令行环境管理工具了。venv 的许多特性也是借鉴的 virtualenv,相比于 venv,其强大之处主要在:

  • 更快
  • 扩展性更强
  • 自动发现并可创建多版本的 Python 环境
  • 可通过 pip 更新
  • 丰富的编程接口

1、安装virtualenv

使用自己对应安装的pip版本

1
pip3 install virtualenv

2、常见虚拟环境管理操作

创建虚拟环境目录

1
cd /data virtualenv myenv5

它会在当前路径下,创建myenv5的目录,虚拟环境的所有命令和包都在这个目录下。

bin:存放一些python、pip命令的目录

virtualenv的软件包管理目录site-package在lib/python3.6/site-packages/下。

激活虚拟环境

1
source /data/myenv5/bin/activate

退出虚拟环境:

1
deactivate

删除虚拟环境,只需要将这个虚拟环境目录删除即可。

1
rm -rf myenv5

指定python解释器:

创建的虚拟环境的python解释器,默认使用virtualenv里的版本。

如果你是把virtualenv安装在python2里,那默认的就是python2,安装在python3里,默认的就是python3。当然,你也可以自己指定使用哪个解释器版本,比如:

1
virtualenv myvenv6 -p python3.9

继承基础环境的包

virtualenv从版本20开始,默认就是’–no-site-packages‘了,默认就是不继承父环境的包。创建的虚拟环境是一个不带任何第三方包的“干净”的Python运行环境。

如果有教程告诉你,“–no-site-packages选择不继承父环境的包”,这个命令已经废弃了。

那么,如果你现在想要继承父环境的包,怎么办?使用–system-site-packages

先在父环境,pip安装一个包jieba

1
pip3 install jieba

创建一个可以访问基础环境包的虚拟环境:

1
virtualenv --system-site-packages myvenv7

进入虚拟目录,查看python版本:

1
2
3
4
5
6
7
[root@ops-130 data]# cd myvenv7/   
[root@ops-130 myvenv7]# source ./bin/activate
(myvenv7) [root@ops-130 myvenv7]# python -V
Python 3.6.15
(myvenv7) [root@ops-130 myvenv7]# pip -V
pip 21.3.1 from /data/myvenv7/lib/python3.6 /site-packages/pip (python 3.6)
(myvenv7) [root@ops-130 myvenv7]# ls /data/myvenv7/lib/python3.6/site-packages/

我们使用python看能否导入父环境的包:

1
(myvenv7) [root@ops-130 myvenv7]# python   Python 3.6.15 (default, Dec 31 2021, 15:08:17)   [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux   Type   "help"  ,   "copyright"  ,   "credits" or   "license" for more information.   >>>   import jieba   >>>

xxxxxxxxxx sudo systemctl start docker  sudo systemctl status docker  docker –version# 注意:# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。# vim /etc/yum.repos.d/docker-ce.repo#   将[docker-ce-test]下方的enabled=0修改为enabled=1## 安装指定版本的Docker-CE:# Step 1: 查找Docker-CE的版本:# yum list docker-ce.x86_64 –showduplicates | sort -r#   Loading mirror speeds from cached hostfile#   Loaded plugins: branch, fastestmirror, langpacks#   docker-ce.x86_64           17.03.1.ce-1.el7.centos           docker-ce-stable#   docker-ce.x86_64           17.03.1.ce-1.el7.centos           @docker-ce-stable#   docker-ce.x86_64           17.03.0.ce-1.el7.centos           docker-ce-stable#   Available Packages# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)# sudo yum -y install docker-ce-[VERSION]bash

其他详细介绍,请参考 virtutalenv 官网:https://virtualenv.pypa.io/en/latest/reference/

3、优缺点:

1、跟venv基本一致,功能过于简单,就只是创建个虚拟隔离环境,没有多余功能。

2、相比venv,它支持在2.x、3.x以及windows,

3、相比venv,可以指定python版本与选择是否继承父环境的包。(venv也可以指定版本)

4、这里virtualenv 有些不便,因为virtual的启动、停止脚本都在特定文件夹,可能一段时间后,你可能会有很多个虚拟环境散落在系统各处,你可能忘记它们的名字或者位置。

这一点远没有pyenv好。

二、virtualenvwrapper

鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper。 virtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。

官网参考:https://virtualenvwrapper.readthedocs.io/

1、安装virtualenvwrapper(确保virtualenv已安装)

1
2
3
4
pip3  install virtualenv
pip3 install virtualenvwrapper
#Windows使用该命令
pip3 install virtualenvwrapper-win

virtualenvwrapper默认将所有的虚拟环境放在~/.virtualenvs目录下管理,可以修改环境变量WORKON_HOME来指定虚拟环境 的保存目录。

1
2
3
4
5
6
7
8
# 可选
# 修改virtualenvwrapper的虚拟环境存放目录
mkdir -p /data/virtualenvs/
# 可选,我们这里安装在默认的
vim /etc/profile
# virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME /Devel

source加载使生效

1
source /etc/profile

虽然已经pip安装了,但是此时,你依然无法使用virtualenvwrapper

上面的virtualenvwrapper被安装到了你使用pip3的python环境下,如下:

1
[root@ops-130   test  ]  # ls /usr/local/python3.6/bin/virtualenvwrapper.sh  /usr/local/python3.6  /bin/virtualenvwrapper.sh

激活virtualenvwrapper

1
source /usr/local/python3.6  /bin/virtualenvwrapper.sh

可以将这个命令也一起放到环境变量中,.bashrc

1
2
3
4
5
vim   /root/.bashrc
# virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
VIRTUALENVWRAPPER_PYTHON= /usr/local/python3.6 /bin/python3 source /usr/local/python3.6 /bin/virtualenvwrapper.sh

注意:如果你安装的virtualenv不在系统默认的python解释器上,就需要单独指定virtualenvwrapper使用的python路径:VIRTUALENVWRAPPER_PYTHON,否则激活的时候,会报错,如下:

No module named virtualenvwrapper

报错,因为它默认使用系统的python路径了。

添加VIRTUALENVWRAPPER_PYTHON变量即可。

1
export VIRTUALENVWRAPPER_PYTHON=  /usr/local/python3.6  /bin/python3

2、virtualenvwrapper使用

创建虚拟环境 mkvirtualenv

1
mkvirtualenv venv8

虚拟环境目录不会放到当前目录下了,它默认装在了/root/.virtualenvs,所有的虚拟环境都会放到这个目录下

1
(venv8) [root@ops-130 data]  # ls /root/.virtualenvs/venv8/   bin lib pyvenv.cfg

如果想要指定python版本,可以使用–python命令

1
2
3
mkvirtualenv --python=  /usr/local/python3.9  /bin/python3 venv9   
# 有环境变量可以简化
mkvirtualenv --python=python3.9 venv9

查看当前的虚拟环境目录

1
(venv9) [root@ops-130 data]  # workon  venv8  venv9

切换虚拟环境

1
2
3
(venv9) [root@ops-130 data]# workon venv8  
(venv8) [root@ops-130 data]# python -V
Python 3.6.15

退出虚拟环境

1
2
(venv8) [root@ops-130 data]# deactivate  
[root@ops-130 data]#

删除虚拟环境

1
rmvirtualenv venv8

virtualenvwrapper 提供环境名字的tab补全功能。当您有很多环境, 并且很难记住它们的名字时,这就显得很有用。

workon 也能停止您当前所在的环境,所以您可以在环境之间快速的切换。

其它命令参考:https://virtualenvwrapper.readthedocs.io/en/latest/

3、优缺点分析:

1、它就是基于virtualenv的封装,将所有虚拟环境整合在一个目录下,默认(~/.virtualenvs)

2、提供了很多api,可以管理(新增,删除,复制,切换)虚拟环境

3、支持tab补全,切换环境很方便。

参考:

https://zhuanlan.zhihu.com/p/106588887

https://virtualenv.pypa.io/en/latest/reference/

https://virtualenvwrapper.readthedocs.io/


使用virtualenv或virtualenvwrapper创建Python虚拟环境
http://anximin.github.io/2024/01/30/Linux_python_env_virtualenv/
作者
Sylar
发布于
2024年1月30日
许可协议