3

Python虚拟环境的创建与管理

 1 year ago
source link: https://www.biaodianfu.com/python-virtual-environment.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

器→工具, 工具软件, 术→技巧, 研发

Python虚拟环境的创建与管理

钱魏Way · 2023-02-26 · 0 次浏览

为什么要创建虚拟环境?

创建虚拟环境是为了在同一台计算机上,使用不同的Python项目需要的不同版本的Python解释器、第三方库和依赖项,以避免版本冲突和相互影响的问题。虚拟环境是一个独立的Python运行时环境,可以在其中安装和管理项目特定的依赖项,这些依赖项不会影响其他项目。这意味着您可以在同一台计算机上并行开发多个Python项目,并使用不同的依赖项和版本,而无需担心它们之间的冲突。虚拟环境还可以帮助您更轻松地管理依赖项,并确保项目的可移植性和可重复性。例如,您可以将项目和其依赖项打包到一个虚拟环境中,并将其传递给其他人或部署到不同的计算机上,而无需担心依赖项的版本或其他问题。

virtual-environment.png

此外,进行一个新的项目开发,创建一个仅适用于该项目的虚拟 Python 环境。这样有助于包管理,同时还能非常清晰地列出项目开发用到的所有包,生成一键安装清单,方便后期的部署或复现。

在Python中创建虚拟环境的工具有很多,比如venv、conda等。这些工具可以帮助您轻松地创建、管理和使用虚拟环境。

Python2 版本创建虚拟环境常使用一个名为 virtualenv 的第三方包。从 Python3.3 以后,标准库就内置了一个名为 venv 的模块,我们可以用它来创建虚拟环境,完全替换 virtualenv。

创建环境

python -m venv ENV_DIR
python -m venv ENV_DIR

ENV_DIR 指定存放环境的目录,一般使用 venv,这是一个不成文的规定。

虚拟环境的目录树结构如下(Windows):

.venv
├─pyvenv.cfg
├─Include
├─Lib
│ └─site-packages
│ ├─pip
│ ├─pip-20.2.3.dist-info
│ ├─pkg_resources
│ ├─setuptools-49.2.1.dist-info
│ ├─easy_install.py
│ └─__pycache__
└─Scripts
│ └─activate
│ └─activate.bat
│ └─Activate.ps1
│ └─deactivate.bat
│ └─easy_install-3.9.exe
│ └─easy_install.exe
│ └─pip.exe
│ └─pip3.9.exe
│ └─pip3.exe
│ └─python.exe
│ └─pythonw.exe
.venv
    ├─pyvenv.cfg
    ├─Include
    ├─Lib
    │  └─site-packages
    │      ├─pip
    │      ├─pip-20.2.3.dist-info
    │      ├─pkg_resources
    │      ├─setuptools-49.2.1.dist-info
    │      ├─easy_install.py
    │      └─__pycache__
    └─Scripts
    │  └─activate
    │  └─activate.bat
    │  └─Activate.ps1
    │  └─deactivate.bat
    │  └─easy_install-3.9.exe
    │  └─easy_install.exe
    │  └─pip.exe
    │  └─pip3.9.exe
    │  └─pip3.exe
    │  └─python.exe
    │  └─pythonw.exe

pyvenv.cfg 是一个配置文件,包含三个参数:

  • home:指向运行命令的 Python 安装目录;
  • include-system-site-packages:是否使用系统 Python 环境中安装的包。默认是 false,即不使用;
  • version:Python 版本号。

激活环境

#Windows
.\ENV_DIR\Scripts\activate
#Unix/macOS
source ENV_DIR/bin/activate
#Windows
.\ENV_DIR\Scripts\activate
#Unix/macOS
source ENV_DIR/bin/activate

退出环境

deactivate
deactivate

删除环境

删除整个环境的安装目录即可。

使用venv是时如何指定Python版本?

在使用venv创建虚拟环境时要创建一个名为myenv的虚拟环境,并使用Python 3.9版本,可以使用以下命令:

python3.9 -m venv ~/myenv
python3.9 -m venv ~/myenv

其中,python3.9是Python 3.9解释器的路径。如果Python 3.9已经安装在系统路径中,则可以直接使用python3.9命令,否则需要指定完整路径。

在Windows系统上,可以使用以下命令指定Python解释器版本:

C:\Python39\python.exe -m venv C:\path\to\venv
C:\Python39\python.exe -m venv C:\path\to\venv

其中,C:\Python39\python.exe是Python 3.9解释器的路径。

使用指定版本的Python解释器创建虚拟环境后,该虚拟环境将默认使用该版本的Python解释器。在激活虚拟环境后,可以使用python命令来启动该版本的Python解释器。

pipenv

Pipenv是Python开发者使用的一种虚拟环境管理工具,它是一个基于pip的工具,它不仅管理虚拟环境,而且还能管理依赖和环境变量等,使得Python应用程序的开发、部署和维护变得更加容易。

下面是Pipenv的一些特性和使用方法:

特性

  • 管理虚拟环境和依赖项
  • 自动创建虚拟环境并安装依赖项
  • 自动更新依赖项
  • 管理环境变量
  • 自动生成Lockfile,确保项目依赖项的版本稳定性
  • 通过lock文件实现可重现性
  • 支持多个Python版本和多个依赖项源
  • 支持自动安装Python依赖项和系统依赖项

安装

pip install pipenv
pip install pipenv

环境管理

  • 创建环境:pipenv install
  • 激活环境:pipenv shell
  • 退出环境:exit
  • 删除环境:pipenv –rm

pipenv install 命令会根据系统默认 Python 版本来创建虚拟环境,并生成用于依赖包管理的 Pipfile 和 Pipfile.lock 文件。当你将项目分享给他人的时候,执行 pipenv install 命令会创建一个虚拟环境并自动安装 Pipfile 中指定的依赖包。

在使用Pipenv创建虚拟环境时,可以使用–python选项指定要使用的Python版本。例如,要创建一个名为myenv的虚拟环境,并使用Python 3.9版本,可以使用以下命令:

pipenv --python 3.9
pipenv --python 3.9

如果本地系统中安装了多个Python版本,则可以使用该命令指定要使用的版本。如果未安装所需的Python版本,则需要先安装所需的Python版本,然后再执行上述命令。

在Pipfile中指定Python版本也是可以的,只需添加如下内容:

[requires]
python_version = "3.9"
[requires]
python_version = "3.9"

这样,在运行pipenv install时,将自动为虚拟环境安装指定的Python版本。如果Pipfile中指定的Python版本与本地系统中的Python版本不同,则Pipenv将自动安装所需的Python版本。

包管理

  • 用包名安装并写入 Pipfile 的生产环境:pipenv install requests
  • 用包名安装并写入 Pipfile 的开发环境:pipenv install pytest –dev
  • 安装 Pipfile 中列出的所有生产环境包:pipenv install
  • 安装 Pipfile 中列出的所有开发环境包:pipenv install –dev
  • 卸载指定包并从 Pipfile 中移除:pipenv uninstall requests
  • 卸载所有生产环境包(不从Pipfile中移除):pipenv uninstall –all
  • 卸载所有开发环境包并从 Pipfile 中移除:pipenv uninstall –all-dev

pipenv –dev是用于在开发模式下安装依赖项的命令。在使用pipenv install命令安装依赖项时,–dev选项可以将开发依赖项安装到虚拟环境中。开发依赖项通常包括测试框架、代码质量工具等,这些依赖项只在开发环境中需要,而不需要在生产环境中使用。

例如,假设项目需要使用pytest和coverage作为测试框架和代码覆盖率工具,在安装这些依赖项时可以使用以下命令:

pipenv install --dev pytest coverage
pipenv install --dev pytest coverage

这将安装pytest和coverage依赖项,并将它们添加到Pipfile的[dev-packages]部分中。

在使用pipenv install命令安装依赖项时,如果未指定–dev选项,则默认情况下所有依赖项都被认为是生产依赖项,并且将安装到[packages]部分中。如果同时指定了–dev选项和–pre选项,则安装预发布版本的依赖项。

配置 pypi 镜像

将 Pipfile 和 Pipfile.lock 中对应的 pypi 源(https://pypi.org/simple)修改为国内镜像源,可以解决包下载速度慢的问题。

  • 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
  • 阿里云:http://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  • 豆瓣:http://pypi.douban.com/simple/

poetry

Poetry是一个Python包管理工具,它可以帮助开发人员管理项目依赖项、虚拟环境、构建和发布。它提供了一个简单、一致、可靠的工作流程,使得开发Python应用程序更加轻松和愉快。poetry 类似 pipenv,也是一个依赖包管理工具。在 pipenv 上做了一些改进,简化了 Python 开发工作流。当然,也能创建虚拟环境。

以下是Poetry的一些主要特点:

  • 自动创建和管理虚拟环境:Poetry在每个项目中创建和管理虚拟环境,确保依赖项在项目之间隔离,并使得项目之间使用的Python版本相互独立。
  • 管理依赖项:Poetry使用toml文件来管理项目的依赖项,并自动解决依赖项之间的版本冲突,确保所有依赖项都能正常工作。
  • 构建和发布:Poetry提供了一种简单的方式来构建和发布Python包,可以打包成Wheel或sdist格式,上传到PyPI或其他支持的包仓库。
  • 支持插件:Poetry具有丰富的插件系统,可以扩展其功能,例如添加支持其他包管理工具、增强依赖项解析器等。

使用Poetry管理Python项目的基本工作流程如下:

  • 创建新的项目:使用poetry new命令创建新的Python项目。
  • 添加依赖项:使用poetry add命令添加依赖项,Poetry会自动将依赖项写入toml文件中。
  • 安装依赖项:使用poetry install命令安装项目的所有依赖项。
  • 运行应用程序:使用poetry run命令运行Python应用程序,Poetry会自动激活虚拟环境并运行应用程序。
  • 构建和发布:使用poetry build和poetry publish命令构建和发布Python包。

Poetry的一个显著特点是,它不仅仅是一个包管理工具,还是一个完整的Python项目管理工具,它可以帮助开发人员管理项目的依赖项、虚拟环境、构建和发布,使得开发Python应用程序更加高效、简单和可靠。

安装

pip install poetry
pip install poetry

用法

  • 创建环境:先执行 poetry init,一路回车确认。然后使用 poetry shell 创建环境
  • 激活环境:pipenv shell(没有环境就创建环境并激活,有环境就直接激活)
  • 退出环境:exit
  • 删除环境:pipenv env remove <ENV_NAME>(ENV_NAME 可通过 poetry env list 查看)

conda

Anaconda 是一个大型的环境管理系统,支持 Python/R 在内的多种语言。安装 Anaconda 或 Miniconda(精简版) 之后就能使用 conda 命令来创建和管理 Python 环境。

Conda是一个流行的包管理工具,它可以用来管理Python虚拟环境。使用Conda可以在同一台计算机上安装多个Python环境,这些环境可以包含不同版本的Python解释器和不同的Python包。以下是使用Conda管理虚拟环境的一些基本步骤:

安装

在安装Conda之前,需要先确认操作系统的位数和版本,以及是否已经安装了Python。下面是安装Conda的一些基本步骤:

  • 下载Conda:从官方网站(https://www.anaconda.com/products/distribution)下载适合自己操作系统的Conda安装包,选择对应Python版本的Conda。
  • 安装Conda:运行下载的Conda安装包,根据提示进行安装。在安装过程中,可以选择将Conda添加到系统路径中,这样可以在任何地方都能够使用Conda命令。
  • 配置Conda:安装完成后,可以使用conda info命令检查Conda的配置情况。在默认情况下,Conda会使用官方镜像站点进行软件包下载和更新,如果想要更改镜像站点,可以使用conda config命令进行配置。

Miniconda是一个轻量级的Conda版本,它只包含了最基本的组件和依赖项,可以让用户根据自己的需要进行选择和安装。下面是在Windows系统上安装Miniconda的基本步骤:

  • 下载安装程序:在官方网站(https://docs.conda.io/en/latest/miniconda.html)下载对应操作系统的Miniconda安装程序,可以选择Python 2.x或Python 3.x版本。
  • 运行安装程序:双击下载的安装程序,按照提示进行安装。安装程序将会提示你选择安装路径、添加环境变量和注册Anaconda账号等选项,可以根据需要进行选择。
  • 打开Anaconda Prompt:安装完成后,在开始菜单中搜索并打开Anaconda Prompt。如果是第一次使用Anaconda Prompt,需要先运行conda init命令,该命令会将Conda相关的环境变量添加到系统环境变量中,方便后续的使用。
  • 创建虚拟环境:在Anaconda Prompt中使用conda create命令创建一个新的虚拟环境,例如:conda create –name myenv python=3.8
  • 激活虚拟环境:创建虚拟环境后,使用conda activate命令激活环境,例如:conda activate myenv
  • 安装依赖:在激活虚拟环境后,可以使用conda install命令安装需要的依赖包,例如:conda install numpy

Miniconda安装完成后,可以使用Anaconda Prompt运行Python程序,管理虚拟环境和安装Python包等。如果需要更新Miniconda或删除虚拟环境,可以使用conda update和conda remove命令进行操作。

用法

  • 创建环境conda create -n ENV_NAME python=3.9
  • 激活环境conda activate ENV_NAME
  • 退出环境conda deactivate
  • 删除环境conda env remove -n ENV_NAME

虚拟环境管理方式,每种方式都有其适用的场景和优缺点。以下是一些常见的虚拟环境管理方式及其特点:

  • venv:Python 3.3及以上版本内置的虚拟环境管理工具,使用方便且易于上手,适合小型项目和个人开发者。但是,它只能管理Python环境,不支持多语言和多版本的环境管理。
  • pipenv:一种基于Pip和virtualenv的虚拟环境管理工具,使用简单,能够自动管理依赖关系,适合中小型项目。但是,它的安装和使用相对较慢,对于复杂项目可能需要手动调整配置文件。
  • poetry:一种新型的Python包管理和虚拟环境管理工具,使用简便,能够自动管理依赖关系和版本控制,适合中小型项目和个人开发者。但是,它的生态相对较新,可能存在兼容性和稳定性的问题。
  • Conda:一种通用的包管理和虚拟环境管理工具,支持多语言和多版本的环境管理,适合大型项目和团队协作。但是,它的安装包较大,使用相对较复杂。

不同的项目和开发团队可能有不同的需求和偏好,因此选择适合自己的虚拟环境管理方式非常重要。

除了上述提到的虚拟环境管理工具,还有一些其他的虚拟环境管理工具可供选择,例如:

  • pyenv:一种用于管理多个Python版本的工具,可以方便地在不同版本之间切换,适合需要同时使用多个Python版本的开发者。
  • virtualenvwrapper:基于virtualenv的一种虚拟环境管理工具,提供了一些方便的命令来创建、删除、复制和切换虚拟环境,适合需要频繁创建和切换虚拟环境的开发者。
  • pipx:一种基于Pip的工具,可以在隔离的环境中安装和运行Python应用程序,适合需要管理多个Python应用程序的开发者。

direnv:一种环境变量管理工具,可以根据当前目录自动加载和卸载环境变量,可以与虚拟环境管理工具结合使用,提供更便捷的开发环境。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK