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
虚拟环境管理
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 应用程序时,有几种方法可以管理项目依赖项。在这篇文章中,它…
使用诗歌的好处
- 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 版权协议,转载请附上原文出处链接和本声明