首页 > 编程语言 >Python 环境管理

Python 环境管理

时间:2022-09-30 09:58:28浏览次数:79  
标签:10 管理 Python 环境 pyenv && ROOT 3.9

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

标签:10,管理,Python,环境,pyenv,&&,ROOT,3.9
From: https://www.cnblogs.com/amboke/p/16743864.html

相关文章

  • python 浮点数计算
    FloatingPointMath先贴个代码,有空再写:importdecimalimportfractions#2017096.82/10000print(f"2017096.82/10000=>{2017096.82/10000}")ori=frac......
  • 生产管理ERP哪一款比较好?
    生产管理用的是MES,企业管理用的才是ERP,这个得弄清楚!如果要谈生产管理,每家工厂的区别、差异性更大,在工厂甲用得很好的管理系统搬到工厂乙,大概率水土不服,不是软件本身的问题,......
  • Python实现列表中嵌套字典按照给定key值去重
    需求:对下列数据按任意字段去重需要达到的效果:按照id进行去重,id重复则算重复。重复的取第一个数据。按照name和tel去重,name和tel都重复则算重复。重复的取第一个数据。......
  • Python 创建虚拟环境 Error: Command returned non-zero exit status 101.
    问题:Python创建虚拟环境Error:Commandreturnednon-zeroexitstatus101.试错:1.将python卸载,重新为所有user安装,无效2.将pip进行更新,pipinstall--upgradepip,无......
  • Python学习笔记5(循环2)
    problem1编写一个程序把输入整数颠倒后存入另一个变量并输出。例如:输入\(1230\),输出\(321\)输入样例:12345输出样例:54321解题思路:就把元组里面元素反转就好了,循环......
  • 借用python的flask库写一个mock实现一个自定义接口服务
    mock在接口测试中可以发挥很大的作用,其中之一便是实现自定义接口服务。python中可以使用flask库实现mock,写一个简单的登录接口,以及调用,直接上代码:第一部分:实现登录接口im......
  • Python实验报告——第4章 序列的应用
    实验报告实例01:输出每日一贴代码如下:importdatetime#导入日期时间类#定义一个时间表mot=['今天星期一:\n坚持下去不是因为我很强,而是因为我别无选择。',......
  • Python第四章实验
    importdatetime#导入日期时间类#定义一个列表mot=["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。","今天星期二:\n含泪播种......
  • Linux 用户组管理#01:添加用户到组、移除组的用户
    添加用户到组usermodusermod[options]LOGINLOGIN:修改的用户;-G:移到某个组;把test用户移到zrf用户组中:zrf@ubuntu:~$sudousermod-Gzrftestzrf@ubuntu:~$......
  • Effective Python pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1EsEfj690uy-s5LrkVYyIIQ点击这里获取提取码 ......