Python 环境管理

Python 环境管理

Python版本、虚拟环境、依赖、包管理

曾几何时,开发人员的笔记本电脑上只有一个 Python 版本和一个 Python 环境,一切运行良好。直到有一天,您需要处理多个项目,这些项目具有不同的 Python 包要求,并且您的老板希望您的应用程序支持最新和最好的 Python 版本。对于第一个问题,您可能已经使用 conda、venv、pip 来管理您的 Python 环境,对于第二个问题,您可以 安装最新的 Python 版本 .然而,如果

  1. 您的应用程序需要支持多个 Python 版本
  2. 您希望您的虚拟环境与您的 Python 项目相关联并与项目一起管理,而不必手动管理。

请注意,我们只讨论 Python 开发环境。对于部署,通常做法是容器化 Python 依赖项,每个容器化环境只支持一个版本。

Python版本管理

当你使用 上述方法 要安装 Python,Python 是真正的系统 Python,与您的项目无关。 pyenv 可以为您的项目创建本地 Python。该链接解释了一个场景:一个项目需要支持 Python 3.6 并使用 3.8-dev 进行实验。您可以使用“pyenv local 3.6.8” 可以在不同的 Python 版本之间快速切换。

[

](https://realpython.com/intro-to-pyenv/)

虚拟环境管理

Python虚拟环境 管理 Python 包。在项目上下文中,您的项目依赖于正常运行的依赖项(例如 pandas、yaml 包,通常在 Python 包索引 )。该领域的主要工具有:

  • virtualenv:Python 2 没有原生虚拟环境管理器,由 virtualenv 提供 venv:这是一个 Python 原生模块,用于创建轻量级的虚拟环境。
  • Pip:这是 Python 的包安装程序。您可以使用它从 Python 包索引和其他索引安装包。
  • Conda:Conda 是一个包和环境管理系统,可以在本地机器上创建、保存、加载和切换 beet 环境。它主要关注数据科学
  • Pipenv:这是一个包管理器,用于管理 Python 项目的依赖项。
  • Poetry:这是最近的一个,通常被称为用于项目依赖管理的简单 Python 工具。

下面的文章有一个表格来比较不同的工具

https://testdriven.io/blog/python-environments
pipenv 和诗歌非常有趣,因为它们与 pyenv 一起工作。她们很美丽 相似的 但诗歌甚至支持 发布你的包 派皮 .

[

发展您的业务 - Remastr

在开发 Django 应用程序时,有几种方法可以管理项目依赖项。在这篇文章中,它…

remastr.com

](https://remastr.com/blog/pip-pipenv-poetry-comparison)

使用诗歌的好处

  • pyproject.toml 作为中央配置文件
  • 所有依赖项及其配置的一个配置文件
  • 无需手动创建和管理虚拟环境
  • 自动解析已安装插件的依赖关系

最受欢迎的 Python IDE 之一 Pycharm 集成了一些工具,例如 虚拟环境 , 康达 , 管道 , 诗歌 .这里还有一篇文章 带有诗歌的 VSCode ,这也表明这些工具很受欢迎。

试试 pyenv

让我们看看 pyenv 如何轻松支持基于项目的 Python 版本管理。我正在使用谷歌 Colab。

安装 pyenv

 #[ https://github.com/pyenv/pyenv-installer](https://github.com/pyenv/pyenv-installer)  
 !卷曲[ https://pyenv.run](https://pyenv.run) |重击

初始化 pyenv

 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && eval "$(pyenv init — path)"

结果:您可以看到 pyenv 在“$HOME/.pyenv”下有自己的文件夹

 # 通过 append 自动加载 pyenv  
 # 以下为  
 你的 shell 的登录启动文件(用于登录 shell)  
 和你的 shell 的交互式启动文件(用于交互式 shell): 导出 PYENV_ROOT="$HOME/.pyenv"  
 命令 -v pyenv >/dev/null ||导出 PATH="$PYENV_ROOT/bin:$PATH"  
 eval "$(pyenv init -)" # 重新启动你的 shell 以使更改生效。

检查 pyenv 支持的 Python 版本

 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv install -list | grep "3\.[89]"

结果:以下是带有 pyenv 的可安装和可管理的 Python 版本。

 3.8.0  
 3.8-dev  
 3.8.1  
 3.8.2  
 3.8.3  
 3.8.4  
 3.8.5  
 3.8.6  
 3.8.7  
 3.8.8  
 3.8.9  
 3.8.10  
 3.8.11  
 3.8.12  
 3.8.13  
 3.9.0  
 3.9-开发  
 3.9.1  
 3.9.2  
 3.9.4  
 3.9.5  
 3.9.6  
 3.9.7  
 3.9.8  
 3.9.9  
 3.9.10  
 3.9.11  
 3.9.12  
 3.9.13  
 miniconda-3.8.3  
 miniconda-3.9.1  
 miniconda3-3.8.3  
 ...

安装 Python 3.9.10 并列出 pyenv 管理的 Python 版本

 # 安装 python 3.9.10  
 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv install 3.9.10  
 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv 版本

结果

 正在下载 Python-3.9.10.tar.xz...  
 ->[ https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz](https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz)  
 正在安装 Python-3.9.10...  
 警告:未编译 Python ctypes 扩展。缺少 libffi 库?  
 将 Python-3.9.10 安装到 /root/.pyenv/versions/3.9.10  
 # pyenv 列表  
 系统  
 * 3.9.10(由 /content/.python-version 设置)

创建项目1并设置Python版本并列出Python版本

 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && mkdir -p /content/project1 && cd /content/project1 && pyenv virtualenv 3.9.10 project1  
 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv 版本

结果

 系统  
 * 3.9.10(由 /content/.python-version 设置)  
 3.9.10/envs/project1  
 项目1

查看项目 1 关联的 Python 版本

 export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv local project1 && pyenv which python  
 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && eval "$(pyenv init --path)" && pyenv local project1 && cd /content/project1 && python -V

结果:当我们使用“pyenv local project1”时,它使用的是与project1相关的Python。

 /root/.pyenv/versions/project1/bin/python  
 蟒蛇 3.9.10

安装 Python 3.8.10,项目 2 将使用该版本

 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv install 3.8.10

立即列出版本

 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && pyenv 版本

结果:我们现在在 pyenv 列表中有 3.8.10,但全局 Python 仍然是 3.9.10

 系统  
 3.8.10  
 * 3.9.10(由 /content/.python-version 设置)  
 3.9.10/envs/project1  
 项目1

但是项目 2 可以通过以下命令使用 Python 3.8.10

 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && eval "$(pyenv init --path)" && mkdir -p /content/project2 && cd /content/project2 && pyenv 本地 3.8.10  
 &&蟒蛇-V

结果

 Python 3.8.10

试试诗

安装

 !curl -sSL[ https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py](https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py) |蟒蛇3 -

创建一个包

 !source $HOME/.poetry/env && 诗歌新我的包

查看包配置

 !cat my-package/pyproject.toml

结果

 [工具.诗歌]  
 名称 = “我的包裹”  
 版本 = “0.1.0”  
 描述 = ""  
 作者 = [“你的名字<[[email protected]](/cdn-cgi/l/email-protection)>"]  
  
 [工具.诗歌.依赖项]  
 python = "^3.7"  
  
 [tool.poetry.dev-依赖项]  
 pytest = "^5.2"  
  
 [构建系统]  
 需要= [“诗歌核心> = 1.0.0”]  
 build-backend = "poetry.core.masonry.api"

使用诗歌构建包

 !cd /content/my-package && source $HOME/.poetry/env && 诗歌构建  
 !ls /content/my-package  
 !ls /content/my-package/dist

结果

 dist my_package 诗歌.lock pyproject.toml README.rst 测试  
 my_package-0.1.0-py3-none-any.whl my-package-0.1.0.tar.gz

添加包依赖

 !cd /content/my-package && source $HOME/.poetry/env && 诗歌添加 PyYAML==6.0

诗歌自动更新包配置

 !cat my-package/pyproject.toml

结果:poetry 在 tool.poetry.dependencies 中添加 PyYAML

 [工具.诗歌]  
 名称 = “我的包裹”  
 版本 = “0.1.0”  
 描述 = ""  
 作者 = [“你的名字[ 你@example.com](/cdn-cgi/l/email-protection#40392f35002538212d302c256e232f2d) >"] [工具.诗歌.依赖项]  
 python = "^3.7"  
 ** _PyYAML = "6.0"_** [tool.poetry.dev-依赖项]  
 pytest = "^5.2" [构建系统]  
 需要= [“诗歌核心> = 1.0.0”]  
 build-backend = "poetry.core.masonry.api"

更新依赖,诗歌更新包配置

 !cd /content/my-package && source $HOME/.poetry/env && 诗歌添加 PyYAML==6.0b1  
 !cat my-package/pyproject.toml

结果

 [工具.诗歌]  
 名称 = “我的包裹”  
 版本 = “0.1.0”  
 描述 = ""  
 作者 = [“你的名字<[[email protected]](/cdn-cgi/l/email-protection)>"]  
  
 [工具.诗歌.依赖项]  
 python = "^3.7"  
 ** _PyYAML = "6.0b1"_**  
  
 [tool.poetry.dev-依赖项]  
 pytest = "^5.2"  
  
 [构建系统]  
 需要= [“诗歌核心> = 1.0.0”]  
 build-backend = "poetry.core.masonry.api"

诗歌与pyenv的整合

 #[ https://python-poetry.org/docs/managing-environments/](https://python-poetry.org/docs/managing-environments/)  
 !export PYENV_ROOT="$HOME/.pyenv" && export PATH="$PYENV_ROOT/bin:$PATH" && eval "$(pyenv init --path)" && pyenv local project1 && cd /content/my-package && source $HOME/.poetry/env && 诗歌环境使用 $(pyenv which python) && 诗歌环境信息

结果

 在 /root/.cache/pypoetry/virtualenvs 中创建 virtualenv my-package-wwvm3iRB-py3.9  
 使用 virtualenv:/root/.cache/pypoetry/virtualenvs/my-package-wwvm3iRB-py3.9  
  
 **虚拟环境**  
 蟒蛇:3.9.10  
 实现:CPython  
 路径:/root/.cache/pypoetry/virtualenvs/my-package-wwvm3iRB-py3.9  
 有效:真  
  
 **系统**  
 平台:linux  
 操作系统:posix  
 Python:/root/.pyenv/versions/3.9.10

附录

[

Python:Pipenv 和诗歌的最佳示例介绍| Cyber​​ITHub

在本教程中,我们将研究两个著名的 Python 包管理器,称为 pipenv 和诗歌。在蟒蛇世界...

www.cyberithub.com

](https://www.cyberithub.com/python-introduction-to-pipenv-and-poetry-with-examples/)

[

从 Python 开发的 pyenv 和诗歌开始

Python 是数据科学社区中使用最广泛的编程语言之一。虽然 Python 有...

媒体网

](https://medium.com/@sri_40116/starting-with-pyenv-poetry-for-python-development-9180720bbed5)

[

使用 Virtualenv 和 Poetry 的 Python 虚拟环境教程

这篇博文是关于什么的 这篇博文主要针对没有使用它的人。在这里你会发现……

serpapi.com

](https://serpapi.com/blog/python-virtual-environments-using-virtualenv-and-poetry/)

[

用于管理虚拟环境的 Python 工具

Python 虚拟环境是“一个自包含的目录树,其中包含特定的 Python 安装......

开发者

](https://dev.to/bowmanjd/python-tools-for-managing-virtual-environments-3bko)

[

Pip vs Conda:Python 两种打包系统的深度比较

如果您在数据科学或科学计算领域使用 Python,您很快就会发现 Python 有两个……

pythonspeed.com

](https://pythonspeed.com/articles/conda-vs-pip/)

我所知, 康达 在数据科学界非常受欢迎,尤其是在 蟒蛇 .

[

使用 conda 的 Python 虚拟环境指南 - WhiteBox

有两种类型的数据科学家,一种是花时间掌握 conda 的,另一种是不花时间掌握 conda 的(并且在...

whiteboxml.com

](https://whiteboxml.com/blog/the-definitive-guide-to-python-virtual-environments-with-conda)

[

如何管理多个 Python 版本和虚拟环境

2019 年 1 月添加:如果您在升级到 macOS Mojave 后返回此博客,请查看此 github 问题...

www.freecodecamp.org

](https://www.freecodecamp.org/news/manage-multiple-python-versions-and-virtual-environments-venv-pyenv-pyvenv-a29fb00c296f)

  • 多个 Python 版本:在同一台机器上安装不同的 Python,例如 2.7 和 3.4。
  • 虚拟环境:隔离的独立环境,可以在其中安装特定版本的 Python 和任何项目特定的包,而不影响任何其他项目。
    如果你使用的是单一版本的 Python,比如 3.3+ 版本,并且想要管理不同的虚拟环境,那么 venv 就是你所需要的。
    如果您想在 3.3+ 时使用多个版本的 Python,无论有无虚拟环境,请继续阅读有关 pyenv 的信息。
    如果您还想使用 Python 2,那么 pyenv-virtualenv 是一个值得考虑的工具。

[

数据科学项目的 Conda 或诗歌入门

如何在 Python 中管理虚拟环境、包和依赖项,并使用 Conda 开始您的数据科学项目……

媒体网

](https://medium.com/semantixbr/getting-started-with-conda-or-poetry-for-data-science-projects-1b3add43956d)

[

pyenv、virtualenv、anaconda 有什么区别?

我是一名尝试学习 python 的 ruby​​ 程序员。我对 pyenv 非常熟悉,因为它就像是从……复制和粘贴。

stackoverflow.com

](https://stackoverflow.com/questions/38217545/what-is-the-difference-between-pyenv-virtualenv-anaconda)

[

Python,系统路径以及 conda 和 pyenv 如何操作它

深入了解在 shell 中键入“python”时会发生什么以及流行的环境管理工具如何操作……

向datascience.com

](https://towardsdatascience.com/python-the-system-path-and-how-conda-and-pyenv-manipulate-it-234f8e8bbc3e)

[

为什么你应该在 Python 项目中使用 Poetry 而不是 Pip 或 Conda

依赖管理是任何需要我们在……中使用功能的编程项目的一个重要方面。

博客.sap.com

](https://blogs.sap.com/2022/05/08/why-you-should-use-poetry-instead-of-pip-or-conda-for-python-projects/)

[

Python 环境、依赖和包管理指南:Conda + Poetry

如果你在不同的开发阶段从事多个 Python 项目,你可能有不同的环境……

alizadeh.com

](https://ealizadeh.com/blog/guide-to-python-env-pkg-dependency-using-conda-poetry)

[

Conda 兼容性 · 第 105 期 · python-poetry/poetry

你好!我尝试在我的 miniconda 环境旁边安装诗歌。它是通过 curl 安装程序安装的。乍一看,似乎……

github.com

](https://github.com/python-poetry/poetry/issues/105)

[

我应该选择哪个 Python 依赖项管理器? - 活动状态

Python 的一大优点是其全面的库生态系统,通常称为包。他们…

www.activestate.com

](https://www.activestate.com/blog/which-python-dependency-manager-should-i-choose/)

[

现代 Python 第 1 部分:使用 pyenv 和诗歌开始一个项目

学习编程语言时,重点主要是理解语法、代码风格和...

www.adaltas.com

](https://www.adaltas.com/en/2021/06/09/pyrepo-project-initialization/)

[

Pip、Pipenv、诗歌或康达

2020 年使用哪个 python 包管理器?点子的替代品。

ahmed-nafies.medium.com

](https://ahmed-nafies.medium.com/pip-pipenv-poetry-or-conda-7d2398adbac9)

上面的文章讨论了每个工具的典型工作流程,很容易上手
https://github.com/python-poetry/poetry/issues/5252

[

Python环境101

pyenv 和 pipenv 有何不同以及何时应该使用它们

向datascience.com

](https://towardsdatascience.com/python-environment-101-1d68bda3094d)

[

Python 环境、依赖和包管理指南:Conda + Poetry

如何自动将包添加到您的环境文件中,而无需担心依赖关系

向datascience.com

](https://towardsdatascience.com/a-guide-to-python-environment-dependency-and-package-management-conda-poetry-f5a6c48d795)

[

诗歌击败 Pip Python 设置的 5 个原因

通过切换到诗歌来进行依赖和虚拟环境管理,使您的 Python 开发过程现代化。

更好的编程.pub

](https://betterprogramming.pub/5-reasons-why-poetry-beats-pip-python-setup-6f6bd3488a04)

开发依赖,npm package.json 配置文件
https://python.plainenglish.io/poetry-a-better-version-of-python-pipenv-561611a029d1

使用PEP 518引入的新标准pyproject.toml文件来管理项目的依赖列表和各种元信息,用于替换Pipfile、requirements.txt、setup.py、setup.cfg、MANIFEST等各种配置文件.in 等

  • 依赖有两种类型,生产环境和开发依赖。例如 pytest

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/39856/41392917

posted @ 2022-09-29 17:43  哈哈哈来了啊啊啊  阅读(227)  评论(0编辑  收藏  举报