不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2021-10-11 00:56  分类:Linux软件安装/优化  编辑

一、virtualenv

前言

动态语言Ruby、Python都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响。例如项目可以在基于Python2的环境中运行,而项目B可以在基于Python3的环境中运行。Python通virtualenv工具管理虚拟环境。

安装 virtualenv

[root@CentOS7-1 ~]# pip install virtualenv
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting virtualenv
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/fe/45/3c419850680999c43f5e3d005e2f54bb3a24184255ebc5244369e49674bd/virtualenv-20.8.1-py2.py3-none-any.whl (5.3 MB)
     |████████████████████████████████| 5.3 MB 1.5 MB/s 

使用方法

[root@CentOS7-1 ~]# mkdir my_project_folder
[root@CentOS7-1 ~]# cd my_project_folder
[root@CentOS7-1 my_project_folder]# virtualenv venv
created virtual environment CPython3.8.12.final.0-64 in 3524ms
  creator CPython3Posix(dest=/root/my_project_folder/venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    added seed packages: pip==21.2.4, setuptools==58.1.0, wheel==0.37.0
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

执行完命令后它会在当前目录下创建文件夹,这个文件夹包含一些Python执行文件(软连接),以及pip副本(直接拷贝过来了,并做了对应小修改),用于安装其他的packges。

[root@CentOS7-1 my_project_folder]# tree ./venv/       
./venv/
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate.nu
│   ├── activate.ps1
│   ├── activate_this.py
│   ├── deactivate.nu
│   ├── pip
│   ├── pip3
│   ├── pip-3.8
│   ├── pip3.8
│   ├── python -> /root/.pyenv/versions/3.8.12/bin/python3.8
│   ├── python3 -> python
│   ├── python3.8 -> python
│   ├── wheel
│   ├── wheel3
│   ├── wheel-3.8
│   └── wheel3.8
├── lib
│   └── python3.8
│       └── site-packages
│           ├── _distutils_hack
│           │   ├── __init__.py
│           │   └── override.py
│           ├── distutils-precedence.pth
│           ├── pip
│           │   ├── __init__.py
│			 │   ......
└── pyvenv.cfg

此外在创建env的时候可以选择指定的Python解释器,例如下面是“基于系统安装的Python3(非pyenv方式安装)”创建的虚拟环境

[root@CentOS7-1 my_project_folder]# virtualenv -p /usr/local/bin/python3 venv

默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数--no-site-packages建立虚拟环境

virtualenv --no-site-packages [虚拟环境名称]

激活虚拟环境

[root@CentOS7-1 my_project_folder]# source ./venv/bin/activate
(venv) [root@CentOS7-1 my_project_folder]# 

激活成功后,在命令行会显示虚拟环境的名称,类似((env)Your-Computer:your_project UserName$)

退出虚拟环境

[root@CentOS7-1 my_project_folder]# deactivate

如果想删除虚拟环境,那么直接运行rm -rf venv/命令即可。

在虚拟环境安装Python packages

Virtualenv 附带有pip安装工具,因此需要安装的packages可以直接运行:

pip install [套件名称]

如果没有启动虚拟环境,系统环境也安装了pip工具,那么packages将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:

export PIP_REQUIRE_VIRTUALENV=true

如果在没开启虚拟环境时运行pip,就会提示错误:

Could not find an activated virtualenv (required).

特别注意:

  1. 虚拟环境目录(如上面的 venv)可以随便建到哪个文件夹下,即 存储位置没有限制,自己规划好就行;
  2. 虚拟环境目录可以新建很多个,即 数量没有限制;
  3. 需要用到哪个虚拟环境(目录),就先激活它,即 用 source 命令加载该环境目录下的 bin/activate 文件即可,如:
    source /root/my_project_folder/venv/bin/activate
    

二、Virtualenvwrapper

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:

1.将所有虚拟环境整合在一个目录下

2.管理(新增,删除,复制)虚拟环境

3.切换虚拟环境

4. ...

安装Virtualenvwrapper

安装Virtualenvwrapper前,需要先安装virtualenv。

[root@CentOS7-1 ~]# pip install virtualenv
[root@CentOS7-1 ~]# pip install virtualenvwrapper

此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在Python安装目录的bin目录下(如:/root/.pyenv/versions/3.8.12/bin/virtualenvwrapper.sh),实际上你需要运行virtualenvwrapper.sh文件才行,先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。

vim /root/.pyenv/versions/3.8.12/bin/virtualenvwrapper.sh

部分文件内容:

# Setup:
#
#  1. Create a directory to hold the virtual environments.
#     (mkdir $HOME/.virtualenvs).
#  2. Add a line like "export WORKON_HOME=$HOME/.virtualenvs"
#     to your .bashrc.
#  3. Add a line like "source /path/to/this/file/virtualenvwrapper.sh"
#     to your .bashrc.
#  4. Run: source ~/.bashrc
#  5. Run: workon
#  6. A list of environments, empty, is printed.
#  7. Run: mkvirtualenv temp
#  8. Run: workon
#  9. This time, the "temp" environment is included.
# 10. Run: workon temp
# 11. The virtual environment is activated.

(1) 创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

(2) 在文件 ~/.bashrc 中,追加如下内容:

export WORKON_HOME=$HOME/.virtualenvs
source /root/.pyenv/versions/3.8.12/bin/virtualenvwrapper.sh

(3) 重新加载配置文件

source ~/.bashrc

此时virtualenvwrapper就可以使用了,virtualenvwrapper的基本使用方式:

1.列出虚拟环境列表

[root@CentOS7-1 ~] workon 
# 或者 
[root@CentOS7-1 ~] lsvirtualenv

2.新建虚拟环境

[root@CentOS7-1 ~] mkvirtualenv [虚拟环境名称]

注意:还可以指定Python版本号

[root@CentOS7-1 ~] mkvirtualenv [虚拟环境名称]  -p ~/.pyenv/versions/3.7.12/bin/python

3.启动/切换 虚拟环境

[root@CentOS7-1 ~] workon [虚拟环境名称]

4.删除虚拟环境

[root@CentOS7-1 ~] rmvirtualenv [虚拟环境名称]

5.离开虚拟环境,和virutalenv一样的命令

deactivate

 

 

参考:

Python虚拟环境Virtualenv详解

virtualenv使用说明

python三大神器之virtualenv

pyenv、virtualenv、virtualenvwrapper三种python多版本介绍

Python虚拟环境virtualenv的安装与使用详解