什么是python env

Python env(环境)是指Python运行时的环境配置。Python环境包括了Python解释器、安装的第三方库、系统环境变量和其他相关配置。

在Python中,我们可以使用不同的工具来创建和管理Python环境,常用的工具包括:

  1. Virtualenv:虚拟环境管理工具,可以创建独立的Python环境,使不同项目之间的依赖不会冲突。
  2. Anaconda:数据科学领域的Python发行版,内置了许多常用的第三方库和工具,可以方便地创建和管理Python环境。
  3. Conda:Anaconda中的包管理工具,可以方便地安装、更新和删除第三方库,同时也可以创建和管理虚拟环境。
  4. Pyenv:Python版本管理工具,可以同时管理多个Python版本,并切换不同版本的Python环境。

通过使用这些工具,我们可以方便地创建和管理Python环境,使得不同项目之间的依赖隔离,同时也可以方便地安装和管理第三方库,提高开发效率。

有什么用

可以创建独立的Python环境,使不同项目之间的依赖不会冲突。

如何安装

我这里的演示环境只Python 3.6.7;其他版本方法说一样的:


//我的演示环境python版本是3.6.7
PS C:\Users\Administrator> python.exe
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 13:35:33) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
PS C:\Users\Administrator>
PS C:\Users\Administrator>
PS C:\Users\Administrator>

//pip 安装virtualenv
PS C:\Users\Administrator> pip install virtualenv
Defaulting to user installation because normal site-packages is not writeable
Collecting virtualenv
  Downloading virtualenv-20.16.5-py3-none-any.whl (8.8 MB)
     |████████████████████████████████| 8.8 MB 3.3 MB/s
Collecting platformdirs<3,>=2.4
  Downloading platformdirs-2.4.0-py3-none-any.whl (14 kB)
Collecting importlib-resources>=5.4
  Downloading importlib_resources-5.4.0-py3-none-any.whl (28 kB)
Collecting importlib-metadata>=4.8.3
  Downloading importlib_metadata-4.8.3-py3-none-any.whl (17 kB)
Collecting filelock<4,>=3.4.1
  Downloading filelock-3.4.1-py3-none-any.whl (9.9 kB)
Collecting distlib<1,>=0.3.5
  Downloading distlib-0.3.6-py2.py3-none-any.whl (468 kB)
     |████████████████████████████████| 468 kB 2.2 MB/s
Collecting typing-extensions>=3.6.4
  Downloading typing_extensions-4.1.1-py3-none-any.whl (26 kB)
Requirement already satisfied: zipp>=0.5 in c:\users\administrator\appdata\roaming\python\python36\site-packages (from importlib-metadata>=4.8.3->virtualenv) (3.5.0)
Installing collected packages: typing-extensions, platformdirs, importlib-resources, importlib-metadata, filelock, distlib, virtualenv
  Attempting uninstall: importlib-resources
    Found existing installation: importlib-resources 5.2.0
    Uninstalling importlib-resources-5.2.0:
      Successfully uninstalled importlib-resources-5.2.0
  WARNING: The script virtualenv.exe is installed in 'C:\Users\Administrator\AppData\Roaming\Python\Python36\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed distlib-0.3.6 filelock-3.4.1 importlib-metadata-4.8.3 importlib-resources-5.4.0 platformdirs-2.4.0 typing-extensions-4.1.1 virtualenv-20.16.5
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the 'c:\program files\python36\python.exe -m pip install --upgrade pip' command.
PS C:\Users\Administrator>

默认安装在这里:

C:\Users\Administrator\AppData\Roaming\Python\Python36\Scripts

上面有提示

使用样例

安装完成后我们创建好python项目的根目录;在项目的根目录创建我们专门对应本项目的env环境

PS D:\temp\python_projects\test01> virtualenv myenv
virtualenv : 无法将“virtualenv”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请
确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ virtualenv myenv
+ ~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (virtualenv:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

PS D:\temp\python_projects\test01>

直接使用会失败,提示也很清楚;需要我们手动将virtualenv安装目录添加到环境变量Path中;当然你也可以不添加而是使用完整路径执行

PS D:\temp\python_projects\test01> C:\Users\Administrator\AppData\Roaming\Python\Python36\Scripts\virtualenv myenv
created virtual environment CPython3.6.7.final.0-64 in 6451ms
  creator CPython3Windows(dest=D:\temp\python_projects\test01\myenv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\Administrator\AppData\Local\pypa\virtualenv)
    added seed packages: pip==21.3.1, setuptools==59.6.0, wheel==0.37.1
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
PS D:\temp\python_projects\test01>
PS D:\temp\python_projects\test01> tree .
文件夹 PATH 列表
卷序列号为 00000091 264B:1418
D:\TEMP\PYTHON_PROJECTS\TEST01
└─myenv
    ├─Lib
    │  └─site-packages
    │      ├─pip
    │      │  ├─_internal
    │      │  │  ├─cli
    │      │  │  ├─commands
    │      │  │  ├─distributions
    │      │  │  ├─index
    │      │  │  ├─locations
    │      │  │  ├─metadata
    │      │  │  ├─models
    │      │  │  ├─network
    │      │  │  ├─operations
    │      │  │  │  ├─build
    │      │  │  │  └─install
    │      │  │  ├─req
    │      │  │  ├─resolution
    │      │  │  │  ├─legacy
    │      │  │  │  └─resolvelib
    │      │  │  ├─utils
    │      │  │  └─vcs
    │      │  └─_vendor
    │      │      ├─cachecontrol
    │      │      │  └─caches
    │      │      ├─certifi
    │      │      ├─chardet
    │      │      │  ├─cli
    │      │      │  └─metadata
    │      │      ├─colorama
    │      │      ├─distlib
    │      │      │  └─_backport
    │      │      ├─html5lib
    │      │      │  ├─filters
    │      │      │  ├─treeadapters
    │      │      │  ├─treebuilders
    │      │      │  ├─treewalkers
    │      │      │  └─_trie
    │      │      ├─idna
    │      │      ├─msgpack
    │      │      ├─packaging
    │      │      ├─pep517
    │      │      │  └─in_process
    │      │      ├─pkg_resources
    │      │      ├─platformdirs
    │      │      ├─progress
    │      │      ├─requests
    │      │      ├─resolvelib
    │      │      │  └─compat
    │      │      ├─tenacity
    │      │      ├─tomli
    │      │      ├─urllib3
    │      │      │  ├─contrib
    │      │      │  │  └─_securetransport
    │      │      │  ├─packages
    │      │      │  │  ├─backports
    │      │      │  │  └─ssl_match_hostname
    │      │      │  └─util
    │      │      └─webencodings
    │      ├─pip-21.3.1.dist-info
    │      ├─pkg_resources
    │      │  ├─extern
    │      │  ├─tests
    │      │  │  └─data
    │      │  │      └─my-test-package-source
    │      │  └─_vendor
    │      │      └─packaging
    │      ├─setuptools
    │      │  ├─command
    │      │  ├─extern
    │      │  ├─_distutils
    │      │  │  └─command
    │      │  └─_vendor
    │      │      ├─more_itertools
    │      │      └─packaging
    │      ├─setuptools-59.6.0.dist-info
    │      ├─wheel
    │      │  ├─cli
    │      │  └─vendored
    │      │      └─packaging
    │      ├─wheel-0.37.1.dist-info
    │      └─_distutils_hack
    └─Scripts
PS D:\temp\python_projects\test01>

启用env/禁用env

PS D:\temp\python_projects\test01> myenv\Scripts\activate
(myenv) PS D:\temp\python_projects\test01> deactivate
PS D:\temp\python_projects\test01>

我们在虚拟环境下安装需要的模块;不会影响本机的实际python环境,这样就可以最大限度地减少项目环境和本机实际环境的混淆。

以numpy库为例:

本机实际环境未安装numpy前

无法使用

PS C:\Users\Administrator> python
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 13:35:33) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>>

虚拟env环境未安装numpy前

也无法使用

PS D:\temp\python_projects\test01> myenv\Scripts\activate
(myenv) PS D:\temp\python_projects\test01> python
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 13:35:33) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>>

虚拟env环境中安装numpy

虚拟环境中安装numpy库完成

(myenv) PS D:\temp\python_projects\test01> pip install numpy
Collecting numpy
  Downloading numpy-1.19.5-cp36-cp36m-win_amd64.whl (13.2 MB)
     |████████████████████████████████| 13.2 MB 1.1 MB/s
Installing collected packages: numpy
Successfully installed numpy-1.19.5
(myenv) PS D:\temp\python_projects\test01>

本机实际环境未安装但虚拟env环境中安装numpy后

本机实际环境依然无法使用numpy库

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>>

虚拟env环境中安装numpy库后

虚拟env环境中可以使用numpy库

(myenv) PS D:\temp\python_projects\test01> python
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 13:35:33) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>

对比两者的pip list结果:

本机实际环境

PS C:\Users\Administrator> pip list
Package             Version
------------------- -------
bcrypt              3.2.0
cffi                1.14.5
cryptography        3.4.7
distlib             0.3.6
et-xmlfile          1.1.0
filelock            3.4.1
future              0.18.2
importlib-metadata  4.8.3
importlib-resources 5.4.0
netmiko             3.4.0
ntc-templates       2.1.0
openpyxl            3.0.7
paramiko            2.7.2
pip                 21.2.4
platformdirs        2.4.0
pycparser           2.20
PyNaCl              1.4.0
pypiwin32           223
pyserial            3.5
pywin32             301
scp                 0.13.5
setuptools          39.0.1
six                 1.16.0
tenacity            7.0.0
textfsm             1.1.2
typing_extensions   4.1.1
virtualenv          20.16.5
WMI                 1.5.1
zipp                3.5.0
WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the 'c:\program files\python36\python.exe -m pip install --upgrade pip' command.
PS C:\Users\Administrator>

虚拟env环境

(myenv) PS D:\temp\python_projects\test01> pip list
Package    Version
---------- -------
numpy      1.19.5
pip        21.3.1
setuptools 59.6.0
wheel      0.37.1
(myenv) PS D:\temp\python_projects\test01>

总结:

1.env环境的创建不会带着原本机环境已安装的模块

2.创建好env环境后,env环境和本机环境各自安装模块互不影响

当然,你可以使用参数对virtualenv环境进行调整:

-p: 指定你要虚拟的Python版本,这里选择了本地的python2.7

--no-site-packages:表示在建立虚拟环境时不将原版本中的第三方库拷贝过来,这样就能获得一个纯净的Python环境。

<env directory path>:表明在该目录下,建立一个虚拟环境。



【Python】Python虚拟环境的使用_夏明亮