1-Python - Virtualenv

about

一般的,执行python代码或者运行python项目,都会使用系统默认的python环境,第三方的包也下载到这个python环境下,那么问题来了,如果有多个python项目,这些项目有的需要python2.7的环境,有的需要python3.6的环境,并且依赖的包也不相同,这个时候时候系统的python环境就不太合适了,因为它就是一个公共的python环境,而各个项目都需要一套独立、干净的python环境,该怎么来搞?这个时候,就需要有专门的工具来方便的在原系统的python环境基础上,创建一个个新的python环境,专门服务不同的项目。

virtualenv用来创建一个"隔离"的Python运行环境,这个python环境也被称为虚拟环境,一般的,一个虚拟环境只服务一个项目,我们将这个项目用的包等全部下载到这个虚拟环境中,并且能随时开启和关闭虚拟环境。
virtualenv本身是一个模块,所以使用前保证系统(所有系统平台)已经安装了python环境。
注意,virtualenv创建虚拟环境的目录,不能包含中文,否则激活不生效!!!!
来看看怎么使用吧!

Windows

win10 + python3.6 + virtualenv20.2.1 + virtualenvwrapper-win1.2.6

virtualenv

前提条件,要有一个python环境。

下载

在Windows平台,我们直接使用pip下载即可:

pip install virtualenv
pip install virtualenv==20.2.1
pip install -i https://pypi.doubanio.com/simple/ virtualenv==20.2.1

# 测试否时安装成功
virtualenv --version

不同版本的命令可能稍有差异,具体的说明可以help一下:

virtualenv --help
usage: virtualenv [--version] [--with-traceback] [-v | -q] [--read-only-app-data] [--app-data APP_DATA] [--reset-app-data] [--upgrade-embed-wheels] [--discovery {builtin}] [-p py] [--creator {builtin,cpython3-win,venv}]
                  [--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list] [--clear] [--no-vcs-ignore] [--system-site-packages] [--copies] [--no-download | --download] [--extra-search-dir d [d ...]] [--pip version]
                  [--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel] [--no-periodic-update] [--symlink-app-data] [--prompt prompt] [-h]
                  dest

optional arguments:
  --version                     display the version of the virtualenv package and its location, then exit
  --with-traceback              on failure also display the stacktrace internals of virtualenv (default: False)
  --read-only-app-data          use app data folder in read-only mode (write operations will fail with error) (default: False)
  --app-data APP_DATA           a data folder used as cache by the virtualenv (default: C:\Users\Anthony\AppData\Local\pypa\virtualenv)
  --reset-app-data              start with empty app data folder (default: False)
  --upgrade-embed-wheels        trigger a manual update of the embedded wheels (default: False)
  -h, --help                    show this help message and exit

verbosity:
  verbosity = verbose - quiet, default INFO, mapping => CRITICAL=0, ERROR=1, WARNING=2, INFO=3, DEBUG=4, NOTSET=5

  -v, --verbose                 increase verbosity (default: 2)
  -q, --quiet                   decrease verbosity (default: 0)

discovery:
  discover and provide a target interpreter

  --discovery {builtin}         interpreter discovery method (default: builtin)
  -p py, --python py            interpreter based on what to create environment (path/identifier) - by default use the interpreter where the tool is installed - first found wins (default: [])

creator:
  options for creator builtin

  --creator {builtin,cpython3-win,venv}
                                create environment via (builtin = cpython3-win) (default: builtin)
  dest                          directory to create virtualenv at
  --clear                       remove the destination directory if exist before starting (will overwrite files otherwise) (default: False)
  --no-vcs-ignore               don't create VCS ignore directive in the destination directory (default: False)
  --system-site-packages        give the virtual environment access to the system site-packages dir (default: False)
  --copies, --always-copy       try to use copies rather than symlinks, even when symlinks are the default for the platform (default: True)

seeder:
  options for seeder app-data

  --seeder {app-data,pip}       seed packages install method (default: app-data)
  --no-seed, --without-pip      do not install seed packages (default: False)
  --no-download, --never-download
                                pass to disable download of the latest pip/setuptools/wheel from PyPI (default: True)
  --download                    pass to enable download of the latest pip/setuptools/wheel from PyPI (default: False)
  --extra-search-dir d [d ...]  a path containing wheels to extend the internal wheel list (can be set 1+ times) (default: [])
  --pip version                 version of pip to install as seed: embed, bundle or exact version (default: bundle)
  --setuptools version          version of setuptools to install as seed: embed, bundle or exact version (default: bundle)
  --wheel version               version of wheel to install as seed: embed, bundle or exact version (default: bundle)
  --no-pip                      do not install pip (default: False)
  --no-setuptools               do not install setuptools (default: False)
  --no-wheel                    do not install wheel (default: False)
  --no-periodic-update          disable the periodic (once every 14 days) update of the embedded wheels (default: False)
  --symlink-app-data            not supported - symlink the python packages from the app-data folder (requires seed pip>=19.3) (default: False)

activators:
  options for activation scripts

  --activators comma_sep_list   activators to generate - default is all supported (default: bash,batch,fish,powershell,python,xonsh)
  --prompt prompt               provides an alternative prompt prefix for this environment (default: None)

config file C:\Users\Anthony\AppData\Local\pypa\virtualenv\virtualenv.ini missing (change via env var VIRTUALENV_CONFIG_FILE)

相关操作

以下命令在终端中执行。

创建虚拟环境
关于系统默认的python环境,如果你的Windows中只装了一个python,那么这个python环境肯定就是默认的了!但如果你一个系统上配置了多个python环境,也就是多版本共存,那么肯定有个是你默认的python环境。
直接使用virtualenv创建虚拟环境。

D:\env> virtualenv env1

上例,在D:\env目录下,创建一个名为env1的虚拟化境,这个虚拟环境相当于将系统默认的python环境拷贝了一份,只是没有拷贝其中的第三方包。
当你的虚拟环境创建成功后,它的主要目录结构是这样的,其中我们只关注重要的即可:

D:\env\env1                   # env1中的主要目录和文件
├─Lib                         # 依赖包目录,必要的工具
│  └─site-packages            # 将来安装的第三方包也在这个目录中
│      ├─pip
│      ├─pip-20.2.4.dist-info
│      ├─pkg_resources
│      ├─setuptools-50.3.2.dist-info
│      ├─wheel
│      ├─wheel-0.35.1.dist-info
│      └─_distutils_hack
└─Scripts                   # 一些可执行程序
    ├─activate.bat          # 启动虚拟环境
    ├─deactivate.bat        # 关闭虚拟环境
    ├─python.exe            # python解释器
    ├─pip.exe               # 包管理工具 pip 推荐使用
    ├─easy_install.exe      # 包管理工具 easy_install 用的不多了
    └─wheel.exe             # 包管理工具 wheel 用的也不是很多,但有机会用上

如果配置了多个python版本,且这个虚拟环境有需要指定的python环境,那么创建时要加参数了:

D:\env> virtualenv --python=python27 env2

--python参数指定python版本。

使用
开启虚拟环境:activate
当你创建好了虚拟环境之后,想要使用需要开启:

D:\env>env1\Scripts\activate.bat

(env1) D:\env>

activate.bat脚本负责启动当前的虚拟环境,启动成功后,命令行前会有个括号包着虚拟环境名,标示接下来的关于python的操作都基于当前虚拟环境。

(env1) D:\env>python -V
Python 3.6.6

(env1) D:\env>pip -V
pip 20.2.4 from D:\env\env1\lib\site-packages\pip (python 3.6)

(env1) D:\env>pip list
Package    Version
---------- -------
pip        20.2.4
setuptools 50.3.2
wheel      0.35.1

由上面的示例可以看到,此时的虚拟环境是一个独立、干净的python环境。
我们可以在这个虚拟环境中,下载包、运行脚本等等都可以,来下个包试试:

(env1) D:\env>pip install requests
(env1) D:\env>pip list
Package    Version
---------- ---------
certifi    2020.11.8
chardet    3.0.4
idna       2.10
pip        20.2.4
requests   2.25.0
setuptools 50.3.2
urllib3    1.26.2
wheel      0.35.1

可以看到成功的将requests模块下载到了当前的虚拟环境中。
关闭虚拟环境:

(env1) D:\env>env1\Scripts\deactivate.bat
D:\env>

deactivate.bat脚本负责退出当前的虚拟环境。退出虚拟环境后,命令行前的括号也没有了。后续的python操作都使用的系统的python环境了。

删除虚拟环境
这没啥好说的,从磁盘的目录中找到env1这个虚拟环境(其实也就是个目录),右键删除即可。

virtualenvwrapper

所有的操作请使用 cmd 终端执行,而不是powershell!
virtualenv最大的缺点就是:每次开启虚拟环境都要去找到虚拟环境所在的位置,然后启动activate,这问题就来了,如果虚拟环境多了,然后记性差的同学又忘记了虚拟环境所在的位置....怎么办呢?

  • 将所有的虚拟环境全部都集中起来放到一个目录下进行集中管理。
  • 使用virtualenvwrapper管理你的虚拟环境。

接下来,我们一起来看看如何使用virtualenvwrapper管理虚拟环境。

关于virtualenvwrapper
virtualenvwrapper是virtualenv的扩展包,丰富了virtualenv的功能,让我们更加方便的管理虚拟环境。
主要功能

  • 将所有的虚拟环境整合到一个目录下
  • 一键管理(add、remove、copy)虚拟环境
  • 一键切换虚拟环境

下载

pip36 install -i https://pypi.doubanio.com/simple virtualenvwrapper-win==1.2.6

当你下载完毕,virtualenvwrapper包将安装到你系统python环境的Scripts目录中。
现在你可以在新的终端中使用它:

C:\Users\Anthony>virtualenvwrapper

 virtualenvwrapper is a set of extensions to Ian Bicking's virtualenv
 tool.  The extensions include wrappers for creating and deleting
 virtual environments and otherwise managing your development workflow,
 making it easier to work on more than one project at a time without
 introducing conflicts in their dependencies.

 virtualenvwrapper-win is a port of Dough Hellman's virtualenvwrapper to Windows
 batch scripts.

 Commands available:

   add2virtualenv: add directory to the import path

   cdproject: change directory to the active project

   cdsitepackages: change to the site-packages directory

   cdvirtualenv: change to the $VIRTUAL_ENV directory

   lssitepackages: list contents of the site-packages directory

   lsvirtualenv: list virtualenvs

   mkproject: create a new project directory and its associated virtualenv

   mkvirtualenv: Create a new virtualenv in $WORKON_HOME

   rmvirtualenv: Remove a virtualenv

   setprojectdir: associate a project directory with a virtualenv

   toggleglobalsitepackages: turn access to global site-packages on/off

   virtualenvwrapper: show this help message

   whereis: return full path to executable on path.

   workon: list or change working virtualenvs

返回了virtualenvwrapper的常用命令。

安装

默认的,virtualenvwrapper命令创建的虚拟环境将保存在WORKON_HOME参数指定的目录中,即echo %USERPROFILE%下的Env目录中,该WORKON_HOME保存所有的虚拟环境,由virtualenvwrapper相关命令集中管理。
当然,我们也可以自行指定WORKON_HOME的目录,便于我们查找,只需要在系统变量中添加即可:

variable path
WORKON_HOME D:\env

这样,我们可以在D:\env管理创建的虚拟环境了。

常用操作

-- 创建虚拟环境
mkvirtualenv env1
mkvirtualenv --python=python2 env2

-- 查看所有已创建的虚拟环境
lsvirtualenv
workon            # workon也可以切换不同的虚拟环境

-- 启动/退出虚拟环境
workon env1
deactivate

-- 进入已启动的虚拟环境目录
cdvirtualenv

-- 查看已启动的虚拟环境的 site-packages 目录中的内容
lssitepackages

-- 删除已停止运行的虚拟环境
rmvirtualenv env2

Linux

centos7.3 + python3.6 + virtualenv20.2.1 + virtualenvwrapper4.8.4

Linux中也可以使用虚拟环境,套路跟Windows中差不多,也是要提前配置好python环境。
但Linux中可以使用virtualenv和virtualenvwrapper两个工具来管理虚拟环境。

virtualenv

下载

[root@cs ~]# pip3 install -i https://pypi.doubanio.com/simple/ virtualenv==20.2.1

使用
创建虚拟环境:

[root@cs env]# virtualenv env2
[root@cs env]# virtualenv --python=python27 env2

创建好虚拟环境后,其目录如下:

/tmp/env/env1
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate.ps1
│   ├── activate_this.py
│   ├── activate.xsh
│   ├── easy_install
│   ├── easy_install3
│   ├── easy_install-3.6
│   ├── easy_install3.6
│   ├── pip
│   ├── pip3
│   ├── pip-3.6
│   ├── pip3.6
│   ├── python -> /usr/local/src/python36/bin/python3
│   ├── python3 -> python
│   ├── python3.6 -> python
│   ├── wheel
│   ├── wheel3
│   ├── wheel-3.6
│   └── wheel3.6
├── lib
│   └── python3.6
│       └── site-packages
│           ├── _distutils_hack
│           ├── distutils-precedence.pth
│           ├── easy_install.py
│           ├── pip
│           ├── pip-20.2.4.dist-info
│           ├── pip-20.2.4.virtualenv
│           ├── pkg_resources
│           ├── setuptools
│           ├── setuptools-50.3.2.dist-info
│           ├── setuptools-50.3.2.virtualenv
│           ├── _virtualenv.pth
│           ├── _virtualenv.py
│           ├── wheel
│           ├── wheel-0.35.1.dist-info
│           └── wheel-0.35.1.virtualenv
└── pyvenv.cfg

细心的你可能发现,启动虚拟环境的activate脚本在/env1/bin目录中(这点跟Windows稍有区别),所以启动需要这么启动:

[root@cs env]# source /tmp/env/env1/bin/activate                # 使用source启动虚拟环境
(env1) [root@cs env]# python -V
Python 3.6.8
(env1) [root@cs env]# pip list
Package    Version
---------- -------
pip        20.2.4
setuptools 50.3.2
wheel      0.35.1
(env1) [root@cs env]# pip install requests
(env1) [root@cs env]# pip list
Package    Version
---------- ---------
certifi    2020.11.8
chardet    3.0.4
idna       2.10
pip        20.2.4
requests   2.25.0
setuptools 50.3.2
urllib3    1.26.2
wheel      0.35.1 
(env1) [root@cs env]# deactivate         # 退出虚拟环境
[root@cs env]# 

跟Windows中另一个区别是,deactivate命令不再是一个脚本文件,而是一个函数,这个函数写在activate脚本中,当activate脚本启动时,就添加到shell环境中,称为了一个变量,所以,我们在虚拟环境中的任何路径下都可以退出虚拟环境。
删除
无需多说,rm -rf命令它不香么!

virtualenvwrapper

关于vitualenvwrapper在Windows部分已经介绍过了,这里直接上干货!

下载

pip3 install -i https://pypi.doubanio.com/simple virtualenvwrapper==4.8.4

现在,它被下载在你系统python环境中的bin目录中,叫做virtualenvwrapper.sh

安装

下载完不能立即使用,而是要做一些基本配置,vim /etc/profile

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/src/python36/bin/python3

其中:

  • WORKON_HOME保存所有已创建的虚拟环境。
  • VIRTUALENVWRAPPER_PYTHON是python解释器的路径。

完事后,source /etc/profile
安装virtualenvwrapper:

[root@cs ~]# source /usr/local/src/python36/bin/virtualenvwrapper.sh
[root@cs ~]# virtualenvwrapper      # 返回帮助信息

完事了。

常用操作

-- 创建虚拟环境
mkvirtualenv env1
mkvirtualenv --python=python2 env2

-- 查看所有已创建的虚拟环境
lsvirtualenv
workon            # workon也可以切换不同的虚拟环境

-- 启动/退出虚拟环境
workon env1
deactivate

-- 进入已启动的虚拟环境目录
cdvirtualenv

-- 查看已启动的虚拟环境的 site-packages 目录中的内容
lssitepackages

-- 删除已停止运行的虚拟环境
rmvirtualenv env2

虚拟环境结合Django实战

win10

本小节演示使用virtualenvwrapper创建虚拟环境,并依此虚拟环境创建django项目。

  1. 创建虚拟环境env1
D:\tmp> mkvirtualenv env1
  1. 启动虚拟环境:
D:\tmp>workon env1
(env1) D:\tmp>
  1. 使用虚拟环境中的pip下载django:
(env1) D:\tmp>pip install -i https://pypi.doubanio.com/simple django
  1. 使用django命令创建django项目和app:
(env1) D:\tmp>django-admin startproject env_demo1
(env1) D:\tmp>cd env_demo1
(env1) D:\tmp\env_demo1>django-admin startapp app01
  1. 启动django项目:
(env1) D:\tmp\env_demo1>python manage.py runserver 127.0.0.1:8888
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 26, 2020 - 15:13:45
Django version 3.1.3, using settings 'env_demo1.settings'
Starting development server at http://127.0.0.1:8888/
Quit the server with CTRL-BREAK.

浏览器访问吧!

虚拟环境在Pycharm中的应用

win10 + python3.6 + pycharm2018.1

现在我们研究虚拟环境在Pycharm中的应用。

Pycharm使用现有的虚拟环境

现在,我们要开发上一小节创建的django项目了。

  1. 使用pycharm打开env_demo1项目根路径。
  2. filesettingsproject env_demo1project interpreter

  1. 因为虚拟环境之前创建好了,所以选择system interpreter,然后右侧从本地找到虚拟环境中的解释器即可,完事一路ok。

  2. 完事,现在就用上了之前创建虚拟环境 env1 了:

愉快的开发吧!

pycharm创建虚拟环境

pycharm集成了virtualenv的环境。
所以,我们可以在pycharm中直接创建虚拟环境。
filesettingsproject env_demo1project interpreter,点击设置按钮选择add,配置相关参数即可。

OK了,一个干净的虚拟环境创建完毕。

pycharm创建django并同时创建虚拟环境

pycharm集成了django开发环境。
所以,我们在使用pycharm创建django项目的时候,可以同时选择创建一个新的虚拟环境或者选择现有的虚拟环境或者python环境作用于当前的项目。
来看操作吧!
filenew projectDjango

这就一步到位了.....
但有个问题,django的版本是你系统解释器的内的django版本,这个没法改变。

虚拟环境中应用requirements

https://www.cnblogs.com/Neeo/articles/10831164.html


that's all, see also:

https://virtualenv.pypa.io/en/latest/# | Linux下virtualenv与virtualenvwrapper详解 | Linux环境下虚拟环境virtualenv安装和使用 | virtualenvwrapper | 安装virtualevn

posted @ 2020-04-13 17:55  听雨危楼  阅读(5128)  评论(0编辑  收藏  举报