翻译: Pyenv管理Python版本从入门到精通二

Pyenv系列:

  • 翻译: Pyenv管理Python版本从入门到精通一
    在这里插入图片描述

1. 高级 Pyenv 用法

1.1 在 pyenv-virtualenv 中使用虚拟环境

可以使用 pyenv-virtualenv 扩展 Pyenv 来管理虚拟环境。这是隔离项目环境并有效管理其依赖项的好方法。以下是使用 pyenv-virtualenv 创建虚拟环境的方法:

首先,在 macOS 上使用 Homebrew 安装 brew install pyenv-virtualenv,在 Linux 上使用 pyenv-installer 脚本安装 pyenv-virtualenv。然后,使用pyenv virtualenv命令创建虚拟环境,后跟 Python 版本和虚拟环境的名称。例如:

pyenv virtualenv 3.8.0 my-env

# Output:
# New python executable in /home/username/.pyenv/versions/3.8.0/envs/my-env/bin/python3.8
# Installing setuptools, pip, wheel...
# done.

要激活此虚拟环境,请使用pyenv activate命令:

pyenv activate my-env

# Output:
# Activating virtualenv 'my-env' with Python 3.8.0

退出虚拟环境用命令

pyenv deactivate my-env

1.2 使用 Pip 管理依赖关系

设置虚拟环境后,可以使用 pip 管理项目的依赖项。例如,要安装 requests 库,您可以运行:

pip install requests

# Output:
# Collecting requests
#   Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
# Installing collected packages: requests
# Successfully installed requests-2.25.1

这会在活动的虚拟环境中安装 requests 库,使其与系统的 Python 环境和其他虚拟环境隔离。

通过掌握 pyenv 的这些高级用法,您可以更有效地管理 Python 项目。

2. 探索替代方案:Virtualenv 和 Conda

虽然 pyenv 是管理 Python 版本的强大工具,但它并不是镇上唯一的游戏。还有其他工具,如 virtualenv 和 conda,根据您的特定需求,您可能会发现它们很有用。让我们仔细看看这些替代方案,看看它们与 pyenv 的比较。

2.1 virtualenv:经典的 Python 环境隔离器

Virtualenv 是一个用于创建隔离 Python 环境的工具。它类似于 pyenv-virtualenv 提供的虚拟环境功能,但它不处理 Python 版本管理。以下是使用 virtualenv 创建虚拟环境的方法:

pip install virtualenv
virtualenv my-env
source my-env/bin/activate

# Output:
# created virtual environment CPython3.8.5.final.0-64 in 159ms
#   creator CPython3.8.5.final.0-64
#   seeder FromAppData pip=21.0.1 wheel=0.36.2 setuptools=52.0.0 via=copy
#   activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

正如你所看到的,virtualenv 使用起来很简单,但它在管理多个 Python 版本方面缺乏 pyenv 的灵活性。

退出虚拟环境用命令

deactivate

2.2 Conda:包管理器和环境管理器合二为一

Conda 是一个包管理器,其中还包括环境管理功能。它可以管理任何软件堆栈中的包和依赖项,而不仅仅是 Python,这使其成为多语言项目的绝佳选择。以下是使用 conda 创建 Python 环境的方法:

conda create --name my-env python=3.8
conda activate my-env

# Output:
# Collecting package metadata (current_repodata.json): done
# Solving environment: done
# 
# ## Package Plan ##
# 
#   environment location: /home/username/anaconda3/envs/my-env
# 
#   added / updated specs:
#     - python=3.8
# 
# The following packages will be downloaded:
# 
#     package                    |            build
#     ---------------------------|-----------------
#     ca-certificates-2020.10.14 |                0         128 KB
#     certifi-2020.6.20          |     pyhd3eb1b0_3         159 KB
#     openssl-1.1.1h             |       h7b6447c_0         3.8 MB
#     pip-20.2.4                 |   py38h06a4308_0         2.0 MB
#     python-3.8.5               |       h7579374_1        57.3 MB
#     setuptools-50.3.1          |   py38h06a4308_1         940 KB
#     wheel-0.35.1               |     pyhd3eb1b0_0          36 KB
#     ------------------------------------------------------------
#                                            Total:        64.4 MB
# 
# Proceed ([y]/n)? 
# 
# Preparing transaction: done
# Verifying transaction: done
# Executing transaction: done
# 
# To activate this environment, use
# 
#     $ conda activate my-env
# 
# To deactivate an active environment, use
# 
#     $ conda deactivate

正如你所看到的,conda 非常强大,但它也比 pyenv 更复杂,如果你只是想管理 Python 版本,可能会有点矫枉过正。

退出虚拟环境用命令

conda deactivate my-env

2.3 选择合适的工具

那么,你应该使用 pyenv、virtualenv 还是 conda?答案取决于您的具体需求。如果您正在寻找一个简单灵活的工具来管理 Python 版本,pyenv 是一个不错的选择。如果你只需要隔离你的 Python 环境,virtualenv 将完成这项工作。如果你正在处理一个多语言项目,并且需要一个强大的包和环境管理器,conda 可能是你的工具。

无论您选择哪种工具,重要的是了解其功能以及如何有效地使用它们来管理您的 Python 项目。

3. 管理 Python 版本的重要性

对于同时处理多个项目的开发人员来说,管理不同的 Python 版本是一项至关重要的技能。每个项目可能需要不同的 Python 版本或一组依赖项,使用错误的版本可能会导致意外结果甚至失败。

在团队中工作时尤其如此,因为开发环境之间的一致性至关重要。每个人都需要使用相同的版本,以确保代码对每个人的行为方式都相同。通过使用 pyenv 等 Python 版本管理工具,您可以轻松地在 Python 版本之间切换并确保团队成员之间的一致性。

4. 了解 PATH 和 Python 版本管理

要了解 Python 版本管理工具的工作原理,您需要了解 PATH 的概念。PATH 是一个环境变量,它告诉系统在何处查找可执行文件。当您在终端中键入命令时,系统会在 PATH 中列出的目录中查找该命令。

Python 版本管理工具操作 PATH 来控制使用哪个 Python 版本。使用 pyenv 切换 Python 版本时,它会更改 PATH 以指向所选 Python 版本的目录。下面是一个简化的示例:

echo $PATH

# Output:
# /usr/local/bin:/usr/bin:/bin

pyenv global 3.8.0
echo $PATH

# Output:
# /home/username/.pyenv/versions/3.8.0/bin:/usr/local/bin:/usr/bin:/bin

在此示例中,在我们切换 Python 版本之前,PATH 不包含任何 pyenv 目录。使用 pyenv 切换到 Python 3.8.0 后,PATH 现在以 Python 3.8.0 的目录开头。这意味着当我们运行 Python 时,我们的系统将使用 Python 3.8.0。

理解这个概念将帮助您掌握 pyenv 和其他 Python 版本管理工具的工作原理,以及为什么它们在管理 Python 版本时如此有用。

5. 将 Pyenv 集成到专业开发工作流程中

一旦你掌握了pyenv的基础知识和高级功能,你就可以开始将其集成到你的专业发展工作流程中。这可能涉及将 pyenv 与版本控制系统(如 git)和持续集成/持续部署 (CI/CD) 管道一起使用。

5.1 Pyenv 和 Git:跨分支管理 Python 版本

如果您使用 git 进行版本控制,则可以使用 pyenv 跨不同分支管理 Python 版本。例如,您可能有一个分支需要 Python 3.7,另一个分支需要 Python 3.8。通过使用 pyenv 为每个分支设置本地 Python 版本,可以确保在切换分支时使用正确的 Python 版本。

git checkout branch-python37
pyenv local 3.7.0
git checkout branch-python38
pyenv local 3.8.0

在此示例中,我们首先检出 branch-python37 分支,并将本地 Python 版本设置为 3.7.0。然后,我们检出 branch-python38 分支,并将本地 Python 版本设置为 3.8.0。现在,每当我们在这些分支之间切换时,pyenv 都会自动切换到正确的 Python 版本。

5.2 Pyenv 和 CI/CD 管道:确保一致的 Python 版本

在 CI/CD 管道中,确保从开发到生产的所有环境中使用相同的 Python 版本至关重要。Pyenv 可以帮助解决这个问题。可以使用 .python-version 文件指定项目的 Python 版本,并将此文件包含在版本控制系统中。然后,在 CI/CD 管道中,可以使用 pyenv 安装并切换到 .python-version 文件中指定的 Python 版本。

5.3 探索相关主题:Docker 和 DevOps 实践

一旦你习惯了在开发工作流程中使用 pyenv,你可能想要探索相关主题,如 Docker 和 DevOps 实践。Docker 可以帮助您为应用程序创建隔离环境,这与 pyenv 的 Python 版本管理结合使用非常有用。另一方面,DevOps 实践可以帮助您提高软件开发过程的效率和质量。

5.4 掌握 Pyenv 的更多资源

要继续使用 pyenv 和相关主题,这里有一些您可能会发现有用的资源:

  • Pyenv GitHub 存储库:pyenv 的官方 GitHub 存储库,您可以在其中找到最新版本的 pyenv 和详细文档。
  • Docker 文档:Docker 的官方文档,您可以在其中了解如何使用 Docker 为您的应用程序创建隔离环境。

6. 总结:使用 Pyenv 掌握 Python 版本管理

在这本综合指南中,我们探讨了如何使用 pyenv 来管理 Python 版本,从安装和基本使用到高级功能。

我们已经学习了如何使用 pyenv install 安装特定的 Python 版本,使用 pyenv global 或 pyenv local 在它们之间切换,以及使用 pyenv-virtualenv 创建隔离环境。 我们还讨论了如何解决常见问题,例如安装问题和与其他工具的兼容性问题。

此外,我们还研究了用于管理 Python 版本的替代工具,例如 virtualenvconda。虽然这些工具各有优势,pyenv 因其在管理多个 Python 版本方面的简单性和灵活性而脱颖而出。

Tool工具Strengths优势Weaknesses弱点
Pyenv简单、灵活的 Python 版本管理可能存在与其他工具的兼容性问题
Virtualenv隔离 Python 环境不处理 Python 版本管理
Conda强大的软件包和环境管理器更复杂,对于简单的 Python 版本管理来说可能有点矫枉过正

最后,我们讨论了管理 Python 版本的重要性,尤其是在专业开发工作流程中。通过使用 pyenv 等工具,可以确保不同环境(从本地开发环境到 CI/CD 管道)的一致性。这在团队环境中至关重要,因为每个人都需要使用相同的 Python 版本,以确保代码对每个人的行为方式相同。

对于任何 Python 开发人员来说,使用 pyenv 掌握 Python 版本管理都是一项宝贵的技能。它可以帮助您更有效地管理项目,更有效地解决问题,并与您的团队更无缝地合作。所以来吧,开始使用 pyenv,让 Python 版本管理变得轻而易举!

参考

https://ioflood.com/blog/pyenv/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328027.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 面向切面编程之AspectCore实践(二)

写在前面 在上一篇中对AspectCore进行了初步的了解,用于拦截的属性加在了具体类的方法上。 C# 面向切面编程之AspectCore初探 这一篇验证一下把拦截属性加在接口上,这样实现该接口的类中所对应的方法都会被拦截到;另外示例中还尝试对方法的…

如何从命令行运行testng.xml?

目录 创建一个新的java项目并从命令行运行testng.xml 使用命令行运行XML文件 从命令行运行现有maven项目的XML文件 在这篇文章中,我们将使用命令行运行testng.xml。有多种场景需要使用命令行工具运行testng.xml。也许您已经创建了一个maven项目,现在想…

【VTKExamples::PolyData】第三期 DecimatePolylineDeleteCell

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例 DecimatePolyline折线抽取和 DeleteCell样例,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. DecimatePo…

YOLOv8改进 | 主干篇 | 低照度增强网络PE-YOLO改进主干(改进暗光条件下的物体检测模型)

一、本文介绍 本文给大家带来的改进机制是低照度图像增强网络PE-YOLO中的PENet,PENet通过拉普拉斯金字塔将图像分解成多个分辨率的组件,增强图像细节和低频信息。它包括一个细节处理模块(DPM),用于通过上下文分支和边缘分支增强图像细节,以及一个低频增强滤波器(LEF),…

C语言经典算法之顺序查找算法

目录 前言 A.建议 B.简介 一 代码实现 二 算法时空复杂度 A.时间复杂度: B.空间复杂度: 三 优点和缺点 A.优点: B.缺点: 四 现实中的应用 前言 A.建议 1.学习算法最重要的是理解算法的每一步,而不是记住算…

steam搬砖项目风险在哪里?这几点一定要记牢

你可能已经听说过Steam搬砖项目,这是一个通过在Steam平台充值美元,购买道具,然后将这些道具转移到BUFF平台进行交易,从而获取利润的方式。这个项目的操作方法主要是利用一些渠道和经验技巧,购买低价道具,然…

力扣每日一练(24-1-17):轮转数组

方法一:使用额外的数组 这个方法的思路是创建一个新的数组,然后将每个元素放到正确的位置上。新数组的第i个元素应该是原数组的第(i len(nums) - k) % len(nums)个元素。 def rotate(nums, k):n len(nums)rotated [0] * nfor i in range(n):rotated[(…

用Axure RP 9制作元件教程

制作 软件:Axure RP 9 图标:iconfont 制作流程 1.打开Axure RP 9 2.iconfont 搜索眼睛 图标 图标找好之后 我们可以开始了 3.制作 我们用文本框 如图片 第2步 我们选中这2个把他们变成动态面板 在动态面板增加一个状态 如图片 我们接下来…

locust快速入门--使用分布式提高测试压力

背景: 使用默认的locust启动命令进行压测时,尽管已经将用户数设置大比较大(400),但是压测的时候RPS一直在100左右。需要增加压测的压力。 问题原因: 如果你是通过命令行启动的或者参考之前文章的启动方式…

Python - 深夜数据结构与算法之 DP 串讲

目录 一.引言 二.DP 知识点回顾 1.递归 2.分治 3.动态规划 三.DP 经典题目回顾 1.Climb-Stairs [70] 2.Unique-Paths [62] 3.House-Robber [198] 4.Min-Path-Sum [64] 5.Best-Time-Sell-Stock [121] 6.Min-Cost-Climb [746] 7.Edit-Distance [72] 8.Longest-Sub-…

AI大模型预先学习笔记一:transformer和fine tune技术介绍

一、商业观点:企业借助大模型获得业务增长可能 二、底层原理:transformer 1)备注 ①下面每个步骤都是自回归的过程(aotu-regressive):已输出内容的每个字作为输入,一起生成下一个字 ②合起来就…

决战排序之巅(二)

决战排序之巅(二) 排序测试函数 void verify(int* arr, int n) 归并排序递归方案代码可行性测试 非递归方案代码可行性测试 特点分析 计数排序代码实现代码可行性测试 特点分析 归并排序 VS 计数排序(Release版本)说明1w rand( ) …

23/76-LeNet

LeNet 早期成功的神经网络。 先使用卷积层来学习图片空间信息。 然后使用全连接层转换到类别空间。 #In[]LeNet,上世纪80年代的产物,最初为了手写识别设计from d2l import torch as d2l import torch from torch import nn from torch.nn.modules.loss import CrossEntropyLos…

Transformer详解(附代码实现及翻译任务实现)

一:了解背景和动机 阅读Transformer论文: 阅读原始的Transformer论文:“Attention is All You Need”,由Vaswani等人于2017年提出,是Transformer模型的开创性工作。 二:理解基本构建块 注意力机制&#…

C++面试宝典第21题:字符串解码

题目 给定一个经过编码的字符串,返回其解码后的字符串。具体的编码规则为:k[encoded_string],表示方括号内部的encoded_string正好重复k次。注意:k保证为正整数;encoded_string只包含大小写字母,不包含空格和数字;方括号确定是匹配的,且可以嵌套。 示例: 编码字符串为…

tcpdump常用参数以及wireshark密文解密

tcpdump常用参数以及wireshark密文解密 文章目录 一、tcpdump命令和常用参数二、在wireshark中协议解析 tcpdump常用参数 一、tcpdump命令和常用参数 tcpdump常用命令:tcpdump -i eth0 src host 11.6.224.1 and udp port 161 -s 0 -w 161.pcap (161为sn…

开发知识点-JAVA-springboot

springboot springbootConfiguration注解的底层核心原理Bean注解的底层核心原理 springboot Configuration注解的底层核心原理 https://www.bilibili.com/video/BV1rq4y1E7gK/?spm_id_from333.999.0.0&vd_sourcef21773b7086456ae21a58a6cc59023be spring.io 全家桶 24…

Mysql 数据库DDL 数据定义语言——数据库,数据表的创建

DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)—Database Definition Language 1、登录数据库,输入用户名和密码 mysql -ufdd -p990107Wjl2、查看数据库 show databases;3、创建一个…

主流人工智能AI工具测评

主流人工智能AI工具测评 主流的人工智能AI工具ChatGPT ——OpenAI研发CHAT_BISON——Google研发Qwen通义千问 ——阿里云研发文心一言——百度研发 根据10个问题分析人工智能的回答女朋友生气了怎么哄千元机性价比推荐小米13 和 vivo iQOO 11s哪个好计算机专业毕业论文护士年终…

node.js(expree.js )模拟手机验证码功能及登录功能

dbconfig.js const mysql require(mysql) module.exports {// 数据库配置config: {host: localhost, // 连接地址port: 3306, //端口号user: root, //用户名password: wei630229, //密码database: exapp2, //数据库名}, // 连接数据库,使用mysql的连接池连接方式…