一、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).
特别注意:
- 虚拟环境目录(如上面的 venv)可以随便建到哪个文件夹下,即 存储位置没有限制,自己规划好就行;
- 虚拟环境目录可以新建很多个,即 数量没有限制;
- 需要用到哪个虚拟环境(目录),就先激活它,即 用 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
参考: