一、python虚拟环境简介
Python 之所以强大,除了语言本身的特性外,更重要的是拥有无所不及的第三方库。强大的软件库,让开发者将精力集中在业务上,而避免重复造轮子的浪费。但众多的软件库,形成了复杂的依赖关系,加上 Python2 和 Python3 旷日持久之争,对采用 Python 开发的项目造成了不少困扰,所以 Python 建议,通过虚拟环境
工具为项目创建纯净的依赖环境,今天我们就来了解下 Python 虚拟环境
python 版本
Python 版本指的是 Python 解析器本身的版本。由于 Python3 不能与 Python2 兼容,而且两大阵营之争持续了很长时间,导致一些软件库需要设配两种版本的 Python,同时开发者可能需要在一个环境中,部署不同版本的 Python,对开发和维护造成了麻烦。因此出现了版本管理器 Pyenv,类似于 nodejs 的 nvm,可以创建出相互隔离的 Python 环境,并且可以方便的切换环境中的 Python 版本,但和 Python 虚拟环境关系不大
python 包库
包库或者叫软件源是 Python 第三方软件的库的集合,或者市场,可以发布、下载和管理软件包,其中 pypi (Python Package Index) https://pypi.org/ 是官方指定的软件包库,基于其上的 pip 工具就是从这里查找、下载安装软件包的。
为了提高下载速度,世界上有很多 Pypi 的镜像服务器,在国内也有多个软件源,例如阿里的软件源是:http://mirrors.aliyun.com/pypi/simple/。除此之外,还有其他软件源,如正对科学计算的 anaconda 的软件源 https://repo.anaconda.com/
清华大学的开源软件镜像网站:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
python 包管理器
软件包源中的软件包数量巨大,版本多样,所以需要借助于软件源管理工具,例如 pip、conda、Pipenv、Poetry 等
pip 是最常用的包管理工具,通过
pip install <packagename>
命令格式来安装软件包,使用的是 pypi 软件包源conda 多用作科学计算领域的包管理工具,功能丰富且强大,使用的软件包源是 Anaconda repository 和 Anaconda Cloud,conda 不仅支持 Python 软件包,还可以安装 C、C++ 、R 以及其他语言的二定制软件包。除了软件包管理外,还能提供相互隔离的软件环境。
Pipenv 是 Kenneth Reitz 在2017年1月发布的Python依赖管理工具,现在由PyPA维护。Pipenv 会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来帮助你实现各种依赖和环境管理相关的操作
Poetry 和 Pipenv 类似,是一个 Python 虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布。你可以把它看做是 Pipenv 和 Flit 这些工具的超集。它可以让你用 Poetry 来同时管理 Python 库和 Python 程序
很多包管理工具不仅提供了基本的包管理功能,还提供了虚拟环境构建,程序管理的等功能
更新pip工具:
产生错误原因:
- 确保你的计算机可以访问互联网,并且没有任何防火墙或代理设置阻止你连接到PyPI服务器。
- 【权限问题】没有用管理员身份启动命令行;
- 【数据源网速问题】使用默认的PyPI源可能会遇到问题。你可以尝试使用国内的镜像源,如清华大学、阿里云等提供的镜像。
- 【防火墙问题】检查防火墙和代理设置:如果你在公司网络或学校网络中工作,确保你的防火墙和代理设置允许你访问PyPI服务器
以管理员身份启动cmd
然后执行:
D:\ProgramFiles\Python\Python313\python.exe -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
解释:
这里的-i参数用于指定PyPI的索引URL。
出现:Successfully installed pip-24.3.1
则表示pip更新成功。
1. 虚拟环境简介
考虑以下场景:
Python 应用经常需要使用一些包第三方包或者模块,有时需要依赖特定的包或者库的版本,所以不能有一个能适应所有 Python 应用的软件环境,很多时候不同的 Python 应用所依赖的版本是冲突的,满足了其中一个,另一个则无法运行,解决这一问题的方法是 虚拟环境。
例如:
- 当我们需要同时维护一个由
Django 1.0
版本驱动的老项目和开发一个使用Django 2.0
版本的新项目时,如何顺滑的在两种开发环境中切换成了一个难题。 - 为了解决这个问题,虚拟环境应运而生。
什么是虚拟环境:
虚拟环境是一个包含了特定 Python 解析器以及一些软件包的自包含目录,不同的应用程序可以使用不同的虚拟环境,从而解决了依赖冲突问题,而且虚拟环境中只需要安装应用相关的包或者模块,可以给部署提供便利。
- 第一次安装好
Python
后,我们就有了一个全局级别的环境(简称全局环境),或者叫做系统级别的环境(简称系统环境)。 - 我们可以使用虚拟环境工具在全局环境的基础上创建多个互相独立、互不影响的虚拟环境,这些虚拟环境可以安装不同版本的
Django
。 - 本质上来说虚拟环境就是相互独立的文件夹,内含
Python
解释器和相关依赖。
使用虚拟环境的好处:
- 保持全局环境的干净
- 指定不同的依赖版本
- 方便记录和管理依赖
构建虚拟环境-虚拟环境原理:
虚拟环境并不是什么新技术,主要是利用了操作系统中环境变量以及进程间环境隔离的特性
操作系统的环境变量可以为程序提供信息和做信息交换介质,进程可以共享操作系统中的环境变量,也可以为进程指定环境变量,其中 PATH 是很重要的环境变量,用于为操作系统和程序提供可执行文件的访问路径,例如写一个程序 a.exe,存放在 D:\MyProgram 中,在命令行中执行 a.exe ,会得到提示“ 无法找到程序 a.exe”,为了让系统找到,可以将 D:\MyProgram 路径加入到 PATH 环境变量中,当输入 a.exe 时,操作系统就会从 PATH 所提供的路径中逐个查找,这时就可以找到了。Linux 和 MacOS 具有相似的特性,甚至比 Windows 的功能更丰富。
Python 虚拟环境就是利用这个特性构建的,在激活虚拟环境之时,激活脚本会将当前命令行程序的 PATH 修改为虚拟环境的,这样执行命令就会在被修改的 PATH 中查找,从而避免了原本 PATH 可以找到的命令,从而实现了 Python 环境的隔离。
为了让开发容易区分当前环境是否虚拟环境以及是那个虚拟环境,命令提示符前会加上特殊标记,例如:
虚拟环境的创建
创建并进入虚拟环境:
安装virtualenv
1,临时使用国内的pypi数据源替代,下载速度快
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple virtualenv其中参数:-i 表示临时使用国内数据源
2. 直接使用默认的pypi数据源下载:
pip install virtualenv安装成功后显示:Successfully installed distlib-0.3.9 filelock-3.16.1 platformdirs-4.3.6 virtualenv-20.27.0
virtualenv工具使用
virtualenv -h 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] [--try-first-with py_exe] [--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 options: --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\acmzn\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, --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: []) --try-first-with py_exe try first these interpreters before starting the discovery (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, none or exact version (default: bundle) --setuptools version version of setuptools to install as seed: embed, bundle, none or exact version (default: none) --wheel version version of wheel to install as seed: embed, bundle, none or exact version (default: none) --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,nushell,powershell,python) --prompt prompt provides an alternative prompt prefix for this environment (value of . means name of the current working directory) (default: None)
配置文件的位置:config file C:\Users\aaa\AppData\Local\pypa\virtualenv\virtualenv.ini missing (change via env var VIRTUALENV_CONFIG_FILE)
虚拟环境virtualenv的使用
virtualenv myvenvtt
注意: --no-site-packages 已经废弃掉了,默认都是不拷贝主环境的sit-package。
自动在:当前位置创建一个 MyVEnv的虚拟环境:
在Scripts文件夹下,有提供的脚本等工具
其中:
activate.bat 用于激活(打开)当前位置的创建的虚拟环境:
效果如下:则进入到(MyVEnv)的python虚拟环境
deactivate.bat用于关闭当前位置的虚拟环境,效果如下:
virtualenvmyvenv
pip install virtualenvwrapper-win
endl;