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 版本之间快速切换。

虚拟环境管理

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

使用诗歌的好处

  • 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):export 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#e79e8892a7829f868a978b82c984888a) >"][tool.poetry.dependencies]  
 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

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

本文链接:https://www.qanswer.top/40036/43213009

posted @ 2022-09-30 09:44  哈哈哈来了啊啊啊  阅读(214)  评论(0编辑  收藏  举报