我们经常会遇到这样的开发需求,比如你手头有多个开发项目,其中项目A要求用python3.7,项目B需要用python3.6,有要求项目A和项目B依赖包相互独立,互不干扰。为了满足这样的开发需求,我们需要在自己的电脑上安装多个Python版本,并且项目之间进行环境隔离。要想安装多个Python版本,可以利用pyenv这个好用的工具,对于建立多个项目之间隔离的开发环境,可以借助于pipenv这个更加好用的包管理工具。

这篇文章将给大家介绍如何利用pyenv和pipenv来管理我们的python开发环境,主要讲两个核心内容:

  1. 如何在同一台电脑上管理多个版本Python;
  2. 为每一个项目建立相互隔绝的虚拟环境。

01 — 安装多个Python版本

我们自己开发的多个项目或者从github上clone的项目,可能依赖不同的Python解释器。因此,我们要想运行这些项目,在工作电脑上就要安装不同版本的Python。

pyenv是Python版本管理工具,利用它可以在同一台电脑上安装多个版本的Python,这个过程非常简单。

1.1、安装或升级pyenv

首先安装pyenv,如果你是Mac电脑,那么推荐使用Homebrew来安装。

$ brew update && brew install pyenv

要想升级pyenv,则可以执行:

$ brew update && brew upgrade pyenv

如果不是Mac电脑,那么就用github方式来安装:

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
$ exec "$SHELL"

这种安装方式的详细说明,还是建议大家参考官方文档:https://github.com/pyenv/pyenv#basic-github-checkout。

对于github安装的pyenv,可以按下面方式进行升级:

$ cd $(pyenv root)
$ git fetch
$ git tag
v1.2.18
$ git checkout v1.2.18

pyenv安装完成后,需要将$(pyenv root)/shims添加到PATH变量前面,这一步非常关键。

$ echo 'export PATH="$(pyenv root)/shims:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

安装完pyenv,可以安装Python啦,一共需要两步。

$ pyenv install 3.7.7
$ pyenv rehash

执行命令pyenv versions查看安装结果。

$ pyenv versionssystem
* 3.7.7 (set by /Users/chunming.liu/.pyenv/version)

可以看到,已经成功安装了Python 3.7.7,安装的位置在/Users/chunming.liu/.pyenv。

1.3、切换Python版本

可以通过pyenv global或者pyenv local切换Python版本。pyenv global属于全局切换,切换完成后,在系统中任何地方执行python,你会发现都是同样的Python版本。

$ pyenv global 3.7.7
$ pyenv versionssystem
* 3.7.7 (set by /Users/chunming.liu/.pyenv/version)
$ python
Python 3.7.7 (default, Apr 12 2020, 12:31:11)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

pyenv local属于局部切换,只能修改当前目录下的Python版本,出了当前目录则失效。

接下来,开始为每个项目建立独立的开发环境。

02 — 用Pipenv创建虚拟环境

Pipenv是Python官方推荐的包管理工具。它综合了 virtualenv , pip 和 pyenv 三者的功能。你可以使用pipenv这一个工具来安装、卸载、跟踪和记录依赖性,并创建、使用和组织你的虚拟环境。

2.1、安装和升级pipenv

如果你是Mac电脑,那么推荐使用Homebrew来安装和升级pipenv:

$ brew update && brew install pipenv
$ brew update && brew upgrade pipenv

也可以通过pip来安装和升级pipenv:

$ pip install pipenv
$ pip install --upgrade pipenv

2.2、为项目建立虚拟环境

进入到项目目录中,通过下面的指令为项目创建虚拟环境。

$ mkdir pipenv_demo
$ cd pipenv_demo
$ pipenv --python 3.7.7
Creating a virtualenv for this project…
Pipfile: /Users/chunming.liu/work/pipenv_demo/Pipfile
Using /Users/chunming.liu/.pyenv/versions/3.7.7/bin/python3 (3.7.7) to create virtualenv…
⠙ Creating virtual environment...Using base prefix '/Users/chunming.liu/.pyenv/versions/3.7.7'
New python executable in /Users/chunming.liu/.local/share/virtualenvs/pipenv_demo-RYMSREda/bin/python3
Also creating executable in /Users/chunming.liu/.local/share/virtualenvs/pipenv_demo-RYMSREda/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /Users/chunming.liu/.pyenv/versions/3.7.7/bin/python3
​
✔ Successfully created virtual environment!
Virtualenv location: /Users/chunming.liu/.local/share/virtualenvs/pipenv_demo-RYMSREda


上面的操作,给pipenv_demo这个项目初始化了一个Python 3.7.7的虚拟环境,并在项目录下生成一个项目依赖包文件Pipefile。如果系统中没有3.7.7版本的Python,pipenv会调用pyenv来安装对应的Python的版本。

默认地,虚拟环境会创建在~/.local/share/virtualenvs目录里面。我们也可以通过pipenv --venv查看项目的虚拟环境目录。可以通过 pipenv --rm 删除虚拟环境。

如果想更改虚拟环境的目录,可以在 .bashrc 或 .bash_profile 中,设置环境变量WORKON_HOME,指定虚拟环境的目录所在位置,比如想将虚拟环境放到~/.venvs目录,则可以执行下面的命令。

$ echo 'export WORKON_HOME=~/.venvs' >> ~/.bash_profile
$ source ~/.bash_profile

如果希望在项目目录下创建虚拟环境目录(.venv),需要在 .bashrc 或 .bash_profile 中配置环境变量PIPENV_VENV_IN_PROJECT:

$ echo 'export PIPENV_VENV_IN_PROJECT=1' >> ~/.bash_profile
$ source ~/.bash_profile

03 — 用Pipenv管理依赖包

pipenv使用 Pipfile 和 Pipfile.lock 来管理依赖包,并且在使用pipenv添加或删除包时,自动维护 Pipfile 文件,同时生成 Pipfile.lock 来锁定安装包的版本和依赖信息。相比pip需要手动维护requirements.txt 中的安装包和版本,具有很大的进步。

3.1 安装依赖包

为项目安装依赖包到虚拟环境中,使每个项目拥有相互独立的依赖包,是非常不错的Python的开发实践。安装依赖包到虚拟环境中的方法:

$ pipenv install pytest
Installing pytest…
Adding pytest to Pipfile's [packages]…
✔ Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success!
Updated Pipfile.lock (1c4d3d)!
Installing dependencies from Pipfile.lock (1c4d3d)…												

利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境相关推荐

  1. 利用VMware搭建虚拟开发环境及VMware虚拟机上网

    局域网xp系统,VMware装linux 9, 局域网 xp自动获取IP:59.64.157.90, 启用 VMware Network AdapterVMnet8.设 IP: 59.64,157.2 ...

  2. 【Python配置】使用pyenv与virtualenv搭建单机多版本python多虚拟环境开发

    用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境 pyenv可以帮助你在一台开发机上建立多个版本的python环境, 并提供方便的切换方法. virtualenv则提供 ...

  3. Django实战1-权限管理功能实现-01:搭建开发环境

    1 项目开发环境 语言环境: python3.6.2 , django-2.1.2 数据库环境:sqlite3(开发环境使用,部署环境使用mysql5.6) 开发工具:pycharm 2 安装pyth ...

  4. 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境

    使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境 前言:原来一直使用Eclipse,换 ...

  5. 属性与内存管理(属性与内存管理都是相互关联的)

    <span style="font-size:18px;"> 属性与内存管理(属性与内存管理都是相互关联的)第一部分一,属性:属性是OC2.0之后出来的新语法,用来取代 ...

  6. 使用pipenv代替virtualenv管理python包

    前言 第一次接触到 pipenv 是因为看到@董明伟大神的<使用pipenv管理你的项目>,之前可能和大家的选择类似使用 virtualenv 或者 pyenv 来管理 python 的包 ...

  7. 群晖NAS教程(十六)、利用Docker安装GitLab管理代码工具

    为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十六).利用Docker安装GitLab管理代码工具 群晖DSM上安装GitLab有两种方式,一种是直接在群晖套件上安装,另一种是 ...

  8. 利用xmind进行日程管理

    利用xmind进行日程管理 最近项目比较多,用Microsoft todo有点繁琐.为了找到单纯美观的日常管理软件,发现 xmind 符合要求. 以日期为中心节点,在前一天晚上的代办文件基础上,把第二 ...

  9. beego利用casbin进行权限管理——第二节 策略存储

    beego利用casbin进行权限管理--第一节 起步.测试 beego利用casbin进行权限管理--第二节 策略存储 beego利用casbin进行权限管理--第三节 策略查询 beego利用ca ...

最新文章

  1. java 指令级别理解i++和++i
  2. python修饰符用法_c#教程之C#语言中的修饰符汇总
  3. “树人杯”暨第三届辽宁科技大学校园程序设计竞赛正赛G 又是一个小游戏(蓝)...
  4. 圣诞节吃饺子时,怎么给女票解释啥是AI?
  5. 【整理】更改MSSQL默认字符集
  6. yarn logs -applicationId 无法导出logs日志 Log aggregation has not completed or is not enabled.
  7. 2014蓝桥杯:地宫取宝(DFS详解)
  8. 会员制营销系统_想提升门店经营水平?会员制营销法可以帮到你
  9. ArcGIS批量使用以表格显示分区统计工具
  10. GetWindowRect,GetClientRect,ScreenToClient MoveWindow SetWindowPos 用法说明
  11. Oracle ERP 仓库(inventory) 词汇
  12. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码
  13. linux 是什么?
  14. 地图省界线什么样_地图上省份的划分精细复杂,为何分得这么细致?原来有这么多学问...
  15. SkyWalking8.4监控跨线程问题解决
  16. 分类数据cotegory介绍以及常用API的属性和方法
  17. 《数据结构学习笔记》-持续记录
  18. 如何在小米9 se(安卓9)安装Xposed框架?
  19. 用vfp实现断点续传
  20. 在MATLAB中调用 Python

热门文章

  1. 保姆级Red Hat没有yum命令、报错This system is not registered to Red Hat Subscription Management.
  2. 数图互通房产管理系统怎么样?
  3. ws协议与http协议
  4. python mysql 编码问题
  5. java 树的各种遍历
  6. html中mark标记,html5 mark标签是什么意思?html5 mark标签的作用又是什么?
  7. 虚拟机网络发生错误,需要运行NetworkManager
  8. 神经网络游戏场05:神经网络 nn.ts - 节点+激活函数
  9. 区块链媒体宣发的注意事项
  10. 移动办公oa管理软件的选择指标是什么?