这将是一篇比较短的文章。
我发文向来注重文章质量,营养不够的宁可不发,但是我相信很多人需要这篇文章。
之所以要去搞清楚这个问题,是我在把 vscode 的 inspector 设置为 pipenv 生成的虚拟环境是遇到了问题。2018-2月 vscode 添加了对 pipenv 的支持,检测到 Pipfile 以后,会将环境自动切换到当前项目的虚拟环境。但是我的咋就不行呢!我就开始折腾。这是一个比较漫长相信你们都不想经历的过程。希望你们搜到的第一篇文章就是这篇。相关关键字如下: vscode 对 pipenv 的支持, vscode 找不到 pipenv 创建的虚拟环境, vscode pipenv, pipenv vscode ...等等
希望能给你带来更多营养,我多说点
不知不觉,上面的内容可能要占本文一半以上了。。。
pyenv 和 pipenv 应该是目前主流的 python 版本控制和虚拟环境的工具了,下面内容都基于这两个。

  1. 从 PATH 开始。当你要执行终端命令的时候,这个命令是从哪来呢,有个环境变量 PATH 企图hold住这个问题,大部分人打印一下 PATH (echo $PATH) 应该都会发现这样一部分 /usr/local/bin:/usr/bin:/bin 。执行命令时查找循序由左到右,/usr/local/bin 里没找到去 /usr/bin 里找,还没有去 /bin 里看看。
  2. 基于此 pyenv 做了些什么呢?他加了个 (pyenv root)/shims 垫片到最左面(具体到 Mac 大多是 /Users/admin/.pyenv/shims 这么个东西)。这就很巧妙了,加了这个,python 啊 pip 啊这些命令都被这个垫片拦截住了,具体用那个版本那个环境全取决于 shims 里面 python 的心情,它指哪就打哪。这就说明了一个问题,只要你使用pyenv 运行 which python 的时候永远都打印 /Users/admin/.pyenv/shims/python 即使它指向的是各种各样的 python 版本!(which pip 同理)
  3. pyenv 通过环境变量 PYENV_VERSION 控制 python 指向的版本,也就是 pyenv shell 控制的内容,控制顺序依次是 pyenv shell, pyenv local, pyenv global。前面的覆盖后面的。比如 PYENV_VERSION = 2.5 使用的就是这个 python: $(pyenv root)/versions/2.5/bin/python2.5。
  4. 这就是为啥要在 ~/.zshrc (或者 bash 对应的配置文件)里面加上 eval "$(pyenv init -),因为要把垫片加到 PATH 的最前面。启用 pyenv 后再打印 PATH 那一大坨你都不想看。
  5. 说了这么多还没扯到问题关键呢,怎么搞。vscode 作者之一在git issues 回答了这个问题,用 pyenv 的时候,是无法自动找到 pipenv 创建的虚拟环境的。这就得绕道了,第一种,可以直接在 vscode 的配置里加上虚拟环境的路径。类似于 "python.pythonPath": "/Users/admin/.local/share/virtualenvs/......" 这种。该路径可以通过 pipenv --py 获取。推荐这种方式,虽然显得有点麻烦。第二种,屏蔽掉 pyenv 把 ~/.zshrc 里面的 eval "$(pyenv init -) 去掉,这样就会用系统的或者 brew 安装的 python, 在这个里面安装 pipenv 之后 vscode 检测到 Pipfile 就会自动找到虚拟环境并切换了。
    说了这么多,希望能给你带来多于答案本身的价值。

python版本管理(python环境隔离)的更多相关文章

  1. 使用pyenv对python版本管理

     1.使用pyenv进行python版本管理   1.1安装对应的依赖包,如果不安装后续操作可能会因为缺少某一个变量包而出现错误 sudo apt-get install -y make build- ...

  2. python版本管理工具pyenv和包管理工具pipenv

    一.pyenv版本管理工具 pyenv是一个python版本管理工具,可以实现轻松切换多个python版本 它可根据每个用户更改全局python版本,也可以为每个项目指定python版本,还可以管理v ...

  3. Awesome Python,Python的框架集合

    Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awes ...

  4. Python资源 --Python库

    环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环境的工 ...

  5. 【python】Python 资源大全中文版

    申明:感谢原作者的整理与分享,本篇文章分享自:https://www.jianshu.com/p/9c6ae64a1bd7 GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常 ...

  6. 1 python学习——python环境配置

    1 python学习--python环境配置 要学习python语言,光看书看教程还是不好,得动手去写.当然,不管学习什么编程语言,最佳的方式还在于实践. 要实践,先得有一个Python解释器来解释执 ...

  7. CentOS使用virtualenv搭建独立的Python环境-python虚拟环境

    CentOS使用virtualenv搭建独立的Python环境-python虚拟环境 virtualenv可以搭建虚拟且独立的python环境,可以使每个项目环境与其他项目独立开来,保持环境的干净,解 ...

  8. Embeding Python & Extending Python with FFPython

    Introduction ffpython is a C++ lib, which is to simplify tasks that embed Python and extend Python. ...

  9. python 运行python manege.py runserver时报错:“no module named djangorestframework” 的解决方案

    python 运行python manege.py runserver时报错:“no module named djangorestframework” 的解决方案 importerror:no mo ...

随机推荐

  1. 注册google账号时出现手机号的问题

    注册谷歌账号时出现此电话号码无法用于进行验证 这主要是86和手机号之间有一个空格造成的,把这个空格删除就可以了

  2. 初学VS的目录结构

    工程目录下各文件的含义 一般大部分的文章可能介绍到上面就算结束了,但我这还没有.创建工程产生的各个文件都你知道是什么用的吗? 如果你是一个初学者,你可能会不知道(老手请跳过本文).Ok,我就带你逐一了 ...

  3. mysql绿色版安装,多实例安装

    1.为什么要装多个mysql多实例? 关于这个的原因,我目前了解为建立一个主数据库,一个或者多个从库,实现一主多从或者主从复制的目的. 2.设么是mysql的多实例? MySQL多实例就是在一台机器上 ...

  4. Leetcode 485. 最大连续1的个数

    1.题目描述(简单题) 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 ...

  5. zTab layui多标签页组件

    zTab zTab是一个layui多标签页插件,仿照了layuiAdmin的iframe版Tab实现 当前版本v1.0 码云地址:https://gitee.com/sushengbuyu/zTab ...

  6. 图论:最短路-SPFA

    该算法由Bellman-Ford算法演变过来,首先介绍一下Bellman-Ford算法 最短路最多经过n-1个点,可以用n-1轮松弛操作来得到 ;i<n;i++) d[i]=INF; d[]=; ...

  7. Linux系统基本网络配置之ifconfig命令

    Linux系统基本网络配置之ifconfig命令 一.Linux系统的网络配置基本包括:网络IP的配置.网关路由的配置.主机DNS的配置.主机名的配置等,本篇注重介绍网络IP的配置. 二.Linux系 ...

  8. UIActivityIndicatorView---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址: iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 UIActivityIndicatorViewactivityIndicatorVi ...

  9. [Unity]插件Node Editor介绍 实现类似状态机画布的扩展

    Unity自带的动画状态机有一套对策划非常友好的UI.但是Unity官方没有公开这些控件的api.除了Asset Store里一些已有的方案,我在这里介绍一个在github上的开源项目,封装了底层,但 ...

  10. [转]python os模块 常用命令

    python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()——判断现在正在实用的平台,Window ...