Python 环境管理
Python 环境管理
Python版本、虚拟环境、依赖、包管理
曾几何时,开发人员的笔记本电脑上只有一个 Python 版本和一个 Python 环境,一切运行良好。直到有一天,您需要处理多个项目,这些项目具有不同的 Python 包要求,并且您的老板希望您的应用程序支持最新和最好的 Python 版本。对于第一个问题,您可能已经使用 conda、venv、pip 来管理您的 Python 环境,对于第二个问题,您可以 安装最新的 Python 版本 .然而,如果
- 您的应用程序需要支持多个 Python 版本
- 您希望您的虚拟环境与您的 Python 项目相关联并与项目一起管理,而不必手动管理。
请注意,我们只讨论 Python 开发环境。对于部署,通常做法是容器化 Python 依赖项,每个容器化环境只支持一个版本。
Python版本管理
当你使用 上述方法 要安装 Python,Python 是真正的系统 Python,与您的项目无关。 pyenv 可以为您的项目创建本地 Python。该链接解释了一个场景:一个项目需要支持 Python 3.6 并使用 3.8-dev 进行实验。您可以使用“pyenv local
[
](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 和诗歌的最佳示例介绍| CyberITHub
在本教程中,我们将研究两个著名的 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
- 多个 Python 版本:在同一台机器上安装不同的 Python,例如 2.7 和 3.4。
- 虚拟环境:隔离的独立环境,可以在其中安装特定版本的 Python 和任何项目特定的包,而不影响任何其他项目。
如果你使用的是单一版本的 Python,比如 3.3+ 版本,并且想要管理不同的虚拟环境,那么 venv 就是你所需要的。
如果您想在 3.3+ 时使用多个版本的 Python,无论有无虚拟环境,请继续阅读有关 pyenv 的信息。
如果您还想使用 Python 2,那么 pyenv-virtualenv 是一个值得考虑的工具。
[
数据科学项目的 Conda 或诗歌入门
如何在 Python 中管理虚拟环境、包和依赖项,并使用 Conda 开始您的数据科学项目……
媒体网
[
pyenv、virtualenv、anaconda 有什么区别?
我是一名尝试学习 python 的 ruby 程序员。我对 pyenv 非常熟悉,因为它就像是从……复制和粘贴。
stackoverflow.com
[
Python,系统路径以及 conda 和 pyenv 如何操作它
深入了解在 shell 中键入“python”时会发生什么以及流行的环境管理工具如何操作……
向datascience.com
[
为什么你应该在 Python 项目中使用 Poetry 而不是 Pip 或 Conda
依赖管理是任何需要我们在……中使用功能的编程项目的一个重要方面。
博客.sap.com
[
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
[
诗歌击败 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 版权协议,转载请附上原文出处链接和本声明