您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python中的虚拟环境和包管理

时间:2022-02-22 13:47:19  来源:  作者:Python阿杰

Python/ target=_blank class=infotextkey>Python中的虚拟环境

虚拟环境是独立的Python环境,有自己的site-packages。基本上,这意味着每个虚拟环境都有自己的一组对第三方软件包的依赖。

如果在同一台机器上开发多个Python项目,虚拟环境会很有帮助。此外,当你将Python代码分发给其他人或在服务器上时,虚拟环境非常方便,可以重现地创建与开发机器上相同的环境。

今天,我们将学习

  • 有哪些工具可以创建隔离的环境
  • 哪些工具有助于Python项目中的包管理

创建虚拟环境

在Python的生态系统中创建虚拟环境有两种常见的方法:virtualenv和venv .

venv

venv是用Python创建虚拟环境的最流行的选择。从Python 3.3开始venv是标准库的一部分,因此一般在安装了Python后才可用。但是,基于Debian的linux发行版要求要安装python3-venv,因为他们的维护者决定将这个模块从核心Python安装中分离出来。

使用创建虚拟环境venv可以从键入以下内容开始

python -m venv venv

该命令在当前的文件夹中创建一个名为venv的文件。现在,要使用这个新的虚拟环境,必须使用以下命令激活它:

source venv/bin/activate # Use this command on bash
.venvScriptsactivate # On windows

启动Python解释器并键入

>>> import sys
>>> sys.executable
'/Users/bas/Code/tmp/venv/bin/python'
>>> for path in sys.path:
...     print(repr(path))
...
''
'/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python39.zip'
'/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9'
'/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload'
'/Users/bas/Code/tmp2/venv/lib/python3.9/site-packages'
>>>

刚刚启动的Python解释器位于你的虚拟环境中。此外site-packages目录(pip安装包所在的位置)指向虚拟环境中的一个路径。

virtualenv

virtualenv 工作原理相似。要使用它,必须首先通过pip安装它:

pip install virtualenv

然后可以

python -m virtualenv venv

请注意,只是将模块的名称从venv到virtualenv(第一个论点)。这venv目标文件夹保持不变。virtualenv将创建一个类似于venv以前有过。需要以与之前完全相同的方式激活新的虚拟环境:

source venv/bin/activate # On bash

virtualenv和...相对venv

你可能想知道这两种工具有什么不同。

首先,virtualenv有更长的历史。它已经在Python 2时代被使用了。直到3.3版,Python才加入了对虚拟环境的官方支持PEP 405 .

作为第三方软件包,virtualenv具有独立于系统Python安装的额外优势,因此可以独立升级。

然而,使用的最大好处是virtualenv代替venv它允许针对除系统Python之外的Python版本。如果只安装了Python 3.9,可以使用virtualenv用Python 3.10创建一个虚拟环境(当然反之亦然)。你不仅可以使用任何想要的受支持的Python版本,还可以在没有root或者Administrator权限,因为安装是在你的工作目录中完成的。

另一方面,使用virtualenv更加复杂。这是因为它的跨Python支持(甚至Python 2仍然支持)使得包和内部的发现有点复杂,并且引导过程需要定制。如果你对这些内幕感兴趣,伯纳特·加博的欧洲Python 2019演讲涵盖了这些见解。

总而言之:

 

venv

virtualenv

赞成的意见

  • 创建虚拟环境的“官方”方式
  • 更清晰的目录结构
  • 支持不同的Python版本
  • 独立于系统Python
  • 弃用Python版本的两年宽限期

面向连接的网络服务(Connection Oriented.NETwork Service)

  • 比...慢virtualenv
  • 更容易出错,因为虚拟环境更复杂

安装软件包

既然我们已经有了一个可以工作的虚拟环境virtualenv或者venv,我们可以开始安装我们需要安装的包,以满足我们项目的依赖性。

pip

pip 是在Python中安装包的事实上的标准,并且从Python 3.4版开始就是标准库的一部分。

要安装软件包,只需输入

pip install django

pip负责在PyPI上查找包并管理它的依赖项。在我们的示例中,我们可以通过上面的命令检查哪些包已经安装:

$ pip list
Package    Version
---------- -------
asgiref    3.5.0
Django     4.0.2
pip        21.1.3
setuptools 57.0.0
sqlparse   0.4.2

这样,pip已安装asgiref和sqlparse .

共享构建环境的最常见方式是pip是通过创建一个requirements.txt看起来像这样的文件:

django==4.0.2

问题是pip它负责安装依赖项,但不负责安装后的依赖项。例如,如果你安装了django随着pip它将安装sqlparse和asgiref给你的。但是,如果卸载django之后,这两个额外的包将被保留,不会被删除。随着时间的推移,你可能会忘记项目真正需要的包,以及那些只是以前安装的包的剩余部分。当你在项目的生命周期中从一个PyPI模块迁移到另一个模块时,这种情况尤其适用。

pip也不区分开发和生产环境。因此,可能需要访问开发人员工具,例如black或者pytest开发期间。在生产服务器上安装这些软件,往好里说是不必要的,往坏里说是有害的。

此外,当两个第三方包有冲突的依赖关系时,pip没有提供解决这些问题的方法。

最后,管理你的requirements.txt不被照顾pip。一些开发人员只是使用pip freeze > requirements.txt每当安装了新的依赖项时。然而,这是不可取的,因为它将包括子依赖,从而恶化上述问题。

pipenv

pipenv 是由创建的工具肯尼斯·雷茨。最显著的区别是pip那是pipenv旨在自动跟踪已安装的软件包。为此,pipenv创建两个文件,Pipfile和Pipfile.lock .

pipenv解决以下问题pip上面提到过:

依赖性管理

安装软件包会自动更新Pipfile还有Pipfile.lock

当我们安装时django随着pipenv,它将安装sqlparse和asgiref对我们来说就像pip会的。然而,如果我们移除django从我们的要求来看,pipenv也将删除这些额外的依赖项。

生产/开发依赖性

一些依赖项,比如linters或者测试工具,只在开发环境中需要。这就是原因pipenv支持--dev旗帜。在生产系统上复制环境时,不会安装使用此标志安装的软件包。

虚拟环境

pipenv还可以为您创建和管理虚拟环境。在实践中,这意味着你可以完全依赖pipenv创建项目环境,包括安装指定的Python版本。

随着命令

pipenv --python 3.10

可以使用特定版本的Python轻松创建一个全新的虚拟env。

poetry

poetry 是Python的一个新的非常有雄心的包管理器。它的目标是为开发者可能遇到的所有虚拟环境和包管理问题提供一个解决方案。

有趣的是,poetry–不像pipenv–不是的保护伞下的“官方”产品包Python打包权威。但是,它依赖于一个名为pyproject.toml(而不是Pipfile和Pipfile.lock如同pipenv确实)。这pyproject.toml规范具有“官方地位”人教版518 .

还有,poetry可用于管理虚拟环境和包,以及构建和发布自己的Python包。

pyproject.toml

poetry依赖于pyproject.toml文件,如下所示:

[tool.poetry]
name = "poetry_tutorial_project"
# ...

[tool.poetry.dependencies]
python = "^3.10"
loguru = "*"
psutil = "*"

[tool.poetry.dev-dependencies]
pytest = "*"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

[tool.poetry.scripts]
run = "wsgi:mAIn"

该文件是唯一的配置文件poetry使用并包含关于依赖关系、构建说明和测试环境的所有信息。

虚拟环境和骨骼创建

这poetry new projectname命令创建了一个合理的项目结构:

/projectname
├── README.md
├── projectname
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_projectname.py

可以添加依赖项

poetry add django

这--dev-dependency只能用于为开发环境添加依赖项。

构建并发布

poetry也可以负责构建你的包并将其发布到PyPI。它取代了twine从这个意义上说。这里有一个很好的指南使用poetry打包Python项目 .

pip和...相对pipenv和...相对poetry

 

pip

pipenv

poetry

赞成的意见

  • 可能是最常用的软件包安装程序
  • 易于使用,包含在标准库中
  • 官方PyPA项目
  • 管理依赖关系,卸载软件包时也是如此
  • 内置虚拟环境创建
pyproject.toml

面向连接的网络服务(Connection Oriented Network Service)

requirements.txt
  • 不支持pyproject.toml文件
  • 大项目范围:没有一个工作工具(也可以被视为优势)

值得一提的其他工具

virtualenvwrApper

virtualenvwrapper 是对的一组扩展virtualenv .

该软件包附带了一些方便的CLI实用程序。最重要的是:

  • mkvirtualenv:创建虚拟环境的快捷方式。而不是venv和virtualenv,虚拟环境由创建virtualenvwrapper不放在工作目录中,而是放在$HOME目录。虚拟环境是通过以下方式创建的mkvirtualenv projectenv .
  • workon:因为virtualenvwrapper在中央位置创建虚拟环境,激活是通过workon命令。无论 你当前的工作目录是什么,都可以运行workon projectenv,它会自动从你的$HOME目录并激活它。

pyenv

pyenv 是管理的工具Python版本。除了我们到目前为止讨论的工具之外,它对管理虚拟环境和包管理都没有帮助。然而,pyenv当然,与其他工具兼容。pyenv可以成为搭建开发工作站的便捷帮手。它本身不依赖于Python本身,因此可以方便地使用它来设置不同的Python安装root /Administrator权利。

要安装特定版本的Python,请键入:

pyenv install 3.10

使用pyenv结合虚拟环境管理器pyenv-团队创建了一些插件:

  • pyenv-virtualenv
  • pyenv-virtualenvwrapper

已弃用:pyvenv

pyvenv(不要与混淆pyenv)是一个用于创建虚拟环境的脚本,它过去是Python 3附带的。从Python 3.6开始,它已被弃用,并被取代python -m venv .

硬币指示器 (coin-levelindicator的缩写)命令行界面(Command Line Interface for batch scripting)

有时候你只想使用PyPI的CLI工具。在这种情况下,不需要虚拟环境进行开发,只需要管理 CLI工具。你每天使用的不同CLI工具都有自己的依赖关系,因此在系统Python中安装这些工具可能会再次导致已知的问题。因此,为每个CLI工具创建单独的虚拟环境是有意义的。

为了使这一过程方便和易于管理,有一些工具可以做到这一点:为CLI工具创建一个隔离的环境,然后运行这些CLI工具。

pipx

随着 pipx 您可以安装公开CLI脚本的软件包。pipx将自动为每个CLI工具创建一个单独的虚拟环境,并将一个符号链接放入一个名为.local/bin在你的内心$HOME目录。

要从PyPI安装CLI工具,只需键入:

$ pipx install pycowsay
  installed package pycowsay 0.0.0.1, Python 3.9.6
  These apps are now globally available
    - pycowsay
done! :sparkles: :star2: :sparkles:

当它被安装后,你就神奇地在你的shell上拥有了CLI工具,并且它不会污染您系统的Python包。

$ pycowsay bas.codes

  ---------
< bas.codes >
  ---------
      ^__^
      (oo)_______
       (__)       )/
           ||----w |
           ||     ||

pip-run

pip-run 与...的目的相同pipx。唯一的区别是pip-run不提供持久的软件包安装,而是在工具执行后删除所有环境。

$ pip-run -q pycowsay -- -m pycowsay "bas.codes"


  ---------
< bas.codes >
  ---------
      ^__^
      (oo)_______
       (__)       )/
           ||----w |
           ||     ||

pip-run是一个很好的工具,因为它可以帮你清理。甚至可以使用安装的软件包运行交互式解释器,这使得pip-run不仅对CLI工具有用,而且对研究PyPI中的模块包也有用:

$ python -m pip-run -q boto
>>> import boto


Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Search: Python  点击:(7)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Search: Python  点击:(6)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Search: Python  点击:(10)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Search: Python  点击:(21)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Search: Python  点击:(35)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  Search: Python  点击:(40)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  Search: Python  点击:(42)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Search: Python  点击:(91)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  Search: Python  点击:(90)  评论:(0)  加入收藏
大语言模型插件功能在携程的Python实践
作者简介成学,携程高级安全研发工程师,关注Python/Golang后端开发、大语言模型等领域。一、背景2023年初,科技圈最火爆的话题莫过于大语言模型了,它是一种全新的聊天机器人模型,...【详细内容】
2024-01-26  Search: Python  点击:(81)  评论:(0)  加入收藏
▌简易百科推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Go语言进阶学习  微信公众号  Tags:Python   点击:(7)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Go语言进阶学习    Tags:Python   点击:(6)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Python技术    Tags:Python   点击:(10)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Python技术  微信公众号  Tags:Python   点击:(21)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Python都知道  微信公众号  Tags:Python   点击:(35)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  子午Python  微信公众号  Tags:Python技巧   点击:(40)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  编程技术汇    Tags:Python代码   点击:(42)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Python学研大本营  微信公众号  Tags:PyCharm插件   点击:(91)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  科学随想录  微信公众号  Tags:Graphlib库   点击:(90)  评论:(0)  加入收藏
Python分布式爬虫打造搜索引擎
简单分布式爬虫结构主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个...【详细内容】
2024-01-25  大雷家吃饭    Tags:Python   点击:(61)  评论:(0)  加入收藏
站内最新
站内热门
站内头条