这将是一篇比较短的文章。
我发文向来注重文章质量,营养不够的宁可不发,但是我相信很多人需要这篇文章。
之所以要去搞清楚这个问题,是我在把 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. 将shell返回的结果保存至数组

    如下,我需要将u1和u2提取出保存至数组,方便后续的调用 root@ubuntu:~# lxc list+------+---------+------------------------------ ...

  2. springboot集成junit测试与javamail测试遇到的问题

    1.springboot如何集成junit测试? 导入junit的jar包 使用下面注解: @RunWith()关于这个的解释看下这两篇文章: http://www.imooc.com/qadetai ...

  3. 题解【luogu1073 最优贸易】

    Solution 考虑原图是 DAG 时怎么做. 拓扑排序 + dp ,令 dp[i] 表示 \(1\) 到 \(i\) 的路径上最小的卖出价格.转移方程就是对每一个可以到达这个点的 dp 取个 mi ...

  4. HDU2688 树状数组(逆序数)

    Rotate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. kubernetes--应用程序健康检查

    版权声明:本文属于原创,欢迎转载,转载请保留出处:http://blog.csdn.net/liyingke112 http://blog.csdn.net/liyingke112/article/d ...

  6. mysql中设置小数

    decimal Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位.例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位. 例:decimal(2,1) ...

  7. BAT script to set local account password never expire

    BAT script wmic UserAccount where Name="account123" set PasswordExpires=False

  8. 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序

    原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这 ...

  9. SPOJ 104 HIGH - Highways

    HIGH - Highways http://www.spoj.com/problems/HIGH/ In some countries building highways takes a lot o ...

  10. Enterprise Architect 13 : 将绘制的图形导出成图片 或者 拷贝到剪贴板中

    使用Enterprise Architect 13 工具画类图.包图.需求图.状态图.时序图什么的导出成图片格式 或者拷贝到剪贴版,步骤如下: Publish -> Save Image -&g ...