(venv) 适合小白的沙盒使用手册

目录:

  1. 简介
  2. 创建虚拟环境
  3. 激活与使用

1.简介

开发python程序时,往往不同的项目需要依赖不同库,有时两个项目需要同一库的不同版本,而所有的第三方依赖库都安装在系统环境下,一方面同一个第三方库无法同时安装两个版本,另一方面导致系统环境越来越臃肿。这时就需要一种虚拟环境使应用相互隔离,也就是沙盒。

2.创建虚拟环境

通过执行 venv 指令来创建一个 虚拟环境

python3 -m venv ${/path/to/new/virtual/environment}

(例如 : D:tmp>python -m venv aaa,将创建一个路径为D:tmpaaa的虚拟环境。)

运行此命令将创建目标目录(父目录若不存在也将创建),并在其中生成一个 pyvenv.cfg 文件,文件中home指向创建虚拟环境的python安装目录,也就是本机的Python安装目录。

同时在目标目录下会创建bin子目录(Windows下是Scripts目录),目录中包含Python 二进制文件的副本或符号链接(具体视平台和参数而定)。

还会创建一个
lib/pythonX.Y/site-packages
子目录(在 Windows 上是 Libsite-packages),将来在虚拟环境中安装的第三方库就在这个目录下。

本命令如果以 -h 参数运行,将显示可用的选项:

D:tmp>python -m venv -h
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
            [--upgrade] [--without-pip] [--prompt PROMPT]
            ENV_DIR [ENV_DIR ...]Creates virtual Python environments in one or more target directories.positional arguments:
  ENV_DIR               A directory to create the environment in.optional arguments:
  -h, --help            show this help message and exit
  --system-site-packages
                        Give the virtual environment access to the system
                        site-packages dir.
  --symlinks            Try to use symlinks rather than copies, when symlinks
                        are not the default for the platform.
  --copies              Try to use copies rather than symlinks, even when
                        symlinks are the default for the platform.
  --clear               Delete the contents of the environment directory if it
                        already exists, before environment creation.
  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.
  --without-pip         Skips installing or upgrading pip in the virtual
                        environment (pip is bootstrapped by default)
  --prompt PROMPT       Provides an alternative prompt prefix for this
                        environment.

创建venv时如果带有 –system-site-packages 选项(为了隔离,一般情况下不带),那么在虚拟环境中可以直接import 系统环境中的库,否则虚拟环境不能使用系统环境中的库,需要使用pip install命令安装。这个值保存在pyvenv.cfg 文件中(true/false).

venv可以同时传多个路径,例如,python -m venv ddd eee fff会同时创建三个相同的虚拟环境。

3.激活与使用

创建虚拟环境后,可以使用虚拟环境的二进制目录中的脚本来“激活”该环境。不同平台调用的脚本是不同的(须将 <venv> 替换为包含虚拟环境的目录路径):

激活

例如我的D:tmp下有一个虚拟环境aaa,执行

D:tmp>aaaScriptsactivate.bat 即可激活。

当一个虚拟环境被激活时,VIRTUAL_ENV 环境变量会被设为该虚拟环境的路径。 这可被用来检测程序是否运行在虚拟环境中。

(aaa) D:tmp>python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getenv('virtual_env')
'D:\tmp\aaa'

当虚拟环境被激活(即虚拟环境的 Python 解释器正在运行),属性 sys.prefix 和 sys.exec_prefix 指向的是虚拟环境的基础目录,而 sys.base_prefix 和 sys.base_exec_prefix 指向非虚拟环境的 Python 安装目录,即指向的是用于创建虚拟环境的那个 Python 安装目录。如果虚拟环境没有被激活,则 sys.prefix 与 sys.base_prefix 相同,且 sys.exec_prefix 与 sys.base_exec_prefix 相同(它们均指向非虚拟环境的 Python 安装目录)。

激活时:
(aaa) D:tmp>python
>>> import sys
>>> sys.prefix
'D:\tmp\aaa'
>>> sys.exec_prefix
'D:\tmp\aaa'
>>> sys.base_prefix
'C:\Program Files (x86)\Python37-32'
>>> sys.base_exec_prefix
'C:\Program Files (x86)\Python37-32'未激活时:
>>> import sys
>>> sys.prefix
'C:\Program Files (x86)\Python37-32'
>>> sys.exec_prefix
'C:\Program Files (x86)\Python37-32'
>>> sys.base_prefix
'C:\Program Files (x86)\Python37-32'
>>> sys.base_exec_prefix
'C:\Program Files (x86)\Python37-32'

(激活环境不是必须的,激活只是将虚拟环境的二进制目录添加到搜索路径中,这样 “python” 命令将调用虚拟环境的 Python 解释器,可以运行其中已安装的脚本,而不必输入其完整路径。但是,安装在虚拟环境中的所有脚本都应在不激活的情况下可运行,并自动与虚拟环境的 Python 一起运行。)

在 shell 中输入 “deactivate” 可以退出虚拟环境。

试试在虚拟环境中使用pip安装numpy

(aaa) D:tmp>pip install numpy
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting numpy
  Downloading http://mirrors.aliyun.com/pypi/packages/b4/46/a3a0d9b40fd00e1adec8e0e51da09186b1764b86cadfc9275048f67d6e61/numpy-1.21.5-cp37-cp37m-win32.whl (11.7 MB)
     |████████████████████████████████| 11.7 MB 6.8 MB/s
Installing collected packages: numpy
Successfully installed numpy-1.21.5
WARNING: You are using pip version 20.1.1; however, version 21.3.1 is available.
You should consider upgrading via the 'd:tmpaaascriptspython.exe -m pip install --upgrade pip' command.(aaa) D:tmp>python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> x = np.empty([3,2], dtype = int)
>>> print (x)
[[1950020416   61396928]
 [ 219038752  435725481]
 [  61115648  219038896]]

查看虚拟环境的site-pageages,numpy果然在这里,而不是在系统环境中。

在pycharm中运行项目时,将python解释器选为项目对应的虚拟环境即可。

完。

声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

相关推荐