因为觉得有参考价值,一直打开许多页面没有关闭,浏览器的 tab 都差不多上百了,决心把一些有意义的内容通过翻译、摘录和重编的形式把核心内容快速统一到博客上来,方便后续检索,也好关掉一些浏览器窗口。

本文是Python Virtual Environments tutorial using Virtualenv and Poetry的翻译、摘录和重编,原作者Dmitriy Zub,我去掉了IDE的部分,加入了一些其它内容,让它更加顺畅内聚。

简介

首先这是篇向大家介绍虚拟环境和virtualenvpoetry小教程,专注在这三个方面:

  1. 什么是Python虚拟环境
  2. 为什么要用它
  3. 怎么用它

什么是虚拟环境

简而言之,就是一个用来隔离东西的东西。可以简单把它理解为把一些安装的包独立放在某一个文件夹的机制,Python可以在某一个固有的独立文件夹里查找和加载安装的包,这样就实现了一台电脑里多个隔离的Python。

然后它是可以防止冲突,比如不同的项目可能有相同的名字的包,如果安装在一起,必然产生冲突。

为什么要用虚拟环境

首先是避免Python版本冲突,有时候你安装完新版本的Python后还需要使用旧版本的Python,也有可能需要使用多个版本的Python,这可能使你不得不把它们分别安装在不同的目录,然后在使用的时候,小心翼翼地选择你想要的Python版本,就像下图这样。

虚拟环境可以让你在同一个系统中实现多个版本共享,使用起来还是像只有一个Python版本一样是不是方便了许多。

其次就是避免包版本的冲突,比如你有两个项目,一个依赖Django 2.2,一个依赖Django 4.0,如果没有虚拟环境,只能存在一个版本,它们import的时候必然有一个启动不了。

有虚拟环境的话,就很简单,各自的环境是独立的,你用的你的2.2,我用我的4.0,各自安好。

如何使用虚拟环境

下面举例说明如何使用虚拟环境,
首先是安装virtualenv

$ pip install virtualenv

然后在项目目录 package/project 创建环境文件夹,

$ virtualenv env

这里的env就是创建的虚拟环境了,里面会独立安装这个虚拟环境的程序包。接下来激活它,

$ source env/bin/activate
(env) $

你可以看到系统的提示符前缀变成了(env),表示你正处于这个虚拟环境之中。这时候安装程序包就会安装到env目录中去,

(env) $ pip install google-search-results

要退出当前虚拟目录很简单,只要执行,

(env) $ deactivate
$

可以看到系统的提示符前缀恢复了。

使用 Poetry

首先是安装它,

$ pip install poetry

安装以后,在package/project目录中执行,

$ poetry init

它会交互式地问你一些项目名、描述、作者、兼容的版本和依赖的程序包之类的问题,最后会在目录下生成一个pyproject.toml文件,它就是用来管理项目和依赖的载体,看起来大概如下:

# pyproject.toml file[tool.poetry]
name = "virtual environments"
version = "0.1.0"
description = ""
authors = ["Dimitry Zub <dimitryzub@gmail.com>"][tool.poetry.dependencies]
python = "^3.9"
google-search-results = "^2.4.0"
# other site-packages will appear here..[tool.poetry.dev-dependencies]
# development dependencies will appear here..[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

简单来说,它就是新的统一的Python项目配置文件,它包含构建系统的需求和信息,pip可以用它来构建系统,它几乎就是setup.py替代器。
package/project中加入新的依赖,可以使用poetry add命令,

$ poetry add google-search-results

这时候poetry会为项目创建一个虚拟环境,并安装指定包,把包名、版本等信息写入pyproject.tomlpoetry.lock,其中后者可以锁定依赖包的版本。

如果项目已经创建了poetry.lockpyproject.toml,那可以用下面的命令来安装依赖包:

$ poetry install

install指令会读取pyproject.tomlpoetry.lock,并安装里面列出的依赖,对poetry.lock的处理方式是这样的:如果有这个文件,就安装里面指定的版本的包,如果没有,那就从pyproject.toml中计算依赖,并安装满足条件的最新版本的包。额外的,如果不想安装开发版本依赖,需要加上--no-dev参数:

$ poetry install --no-dev

结论

不同项目,不同环境。简单来说,就是对不同的项目要做好隔离,实现各项目使用不同的库版本,甚至不同的Python版本。

全局安装必然引发混乱,想像一下如何在全局安装多个不同版本的包,又如何让多个版本的Python共存,就让人头大了,千万不要这么干。

Python虚拟环境教程:使用Virtualenv和Poetry相关推荐

  1. 基于Windows下Anaconda创建python虚拟环境教程

    基于Windows下Anaconda创建python虚拟环境教程 Anaconda是目前最流行的数据科学平台以及现代机器学习的基础.同时Anaconda 也是一个Python的发行版,专注于人工智能, ...

  2. python虚拟环境venv、virtualenv

    目录 原理 创建.删除虚拟环境 激活.退出.初始化虚拟环境 导出.导入虚拟环境 pycharm+虚拟环境 部署虚拟环境 pycharm目录下idea作用 pycharm目录下venv文件内容含义 原理 ...

  3. Linux、Mac、windows 系统下 配置Python虚拟环境 virtualenvwrapper教程,workon切换环境, 非常简单方便

    前言 开发及测试过程中每个环境都有各自的作用,避免破坏其他环境所以建议每个项目新建一个虚拟环境,经过对比最终我选择了virtualenvwrapper来作为我开发中虚拟环境管理工具,接下来一起来看一下 ...

  4. Python虚拟环境pyenv、venv(pyvenv)、virtualenv之间的区别,终于搞清楚了!

    背景 问题1: 举个例子,tensorflow(tf)是一个十分流行的python机器学习库,你现在手里有两个tf项目,其中项目A需要使用python2.7 + f1.2,项目B需要使用python2 ...

  5. Python虚拟环境 之 virtualenv安装、创建、激活、关闭

    目录 Python虚拟环境 1.virtualenv 2.安装Virtualenv 3.创建virtualenv 4.激活virtualenv 5.关闭virtualenv 6.venv Python ...

  6. 安装 python 虚拟环境 > pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/报错解决办法

    安装 python 虚拟环境 > pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/报错解决办法 [root@ ...

  7. windows的python切换环境_Windows下的python虚拟环境设置

    Windows下的python虚拟环境设置: virtualenv 在python开发中,我们可能会遇到一种情况:就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲 ...

  8. 基于远程服务器安装配置Anaconda环境及创建python虚拟环境详细方案

    基于远程服务器安装配置Anaconda环境及创建python虚拟环境详细方案 一.打开连接好自己的远程服务器(博主用的是MobaXterm软件,比较方便). 二.查看选取Anaconda版本,点击下面 ...

  9. 终极版Python学习教程:一篇文章讲清楚Python虚拟环境

    我在之前写过一篇Python学习教程,说过新手往往没有注意环境隔离,导致Python项目包与包之间冲突. 并且Python2与3代码执行有问题等等.鉴于此我决定今天的Python学习教程给大家聊聊关于 ...

最新文章

  1. java datetime和date_Java 8时间接口localDateTime和Date的对比
  2. C++实现8皇后问题
  3. r语言和python-R VS Python:R语言是否真的过时了?
  4. 20155338 《网络攻防》 Exp7 网络欺诈防范
  5. 云炬Android开发笔记 7登陆注册功能开发
  6. 配置 tsconfig.json
  7. Java 8:对集合中的值进行排序
  8. 设计模式笔记——生成器模式(Builder Pattern)
  9. 博途软件中多重背景块的建立_如何正确的理解西门子博途中的—单个实例和多重实例的区别...
  10. python中的super使用方法[探索4]
  11. Feign 重试解析
  12. VC 2008下安装与配置OpenCV2.1
  13. 如何测试某个网站的图片是否可外链使用
  14. 【#9733;】选择好游戏认准这30个特质!
  15. css 标点符号换行问题
  16. pcap_compile
  17. 2013年全球重要黑客大会时间及网址一览
  18. elementUI表格合并行数据
  19. 几步操作即可实现WhatsApp群发
  20. Mac系统运行“exe”文件最简单的解决办法

热门文章

  1. 1.如何让另一台电脑访问本机发布的web项目
  2. Mac安装starUML
  3. 基于51单片机的自动售货机系统设计
  4. 论文阅读|HigherHRNet
  5. 垃圾焚烧发电厂智能点巡检系统
  6. 《Think Python》练习 5-2:费马大定理验证
  7. iOS 10的iMessage新功能你都玩过了吗?炫酷技能大揭秘
  8. 机器学习中常见的防止过拟合处理方法
  9. 十佳最受欢迎的编程语言 你擅长几个?
  10. 如何在 Vivaldi 浏览器中设置 百度 搜索