这将是一篇比较短的文章。
我发文向来注重文章质量,营养不够的宁可不发,但是我相信很多人需要这篇文章。
之所以要去搞清楚这个问题,是我在把 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. VS 2013 with update安装失败(kb2829760)解决方案

    update过程中遇到kb2829760补丁无法更新而导致vs安装失败的解决方法: 1.安装KB2829760: 2.安装KB2829760中文语言包: 3.安装VS2013 with update. ...

  2. MQ对比

    转:http://blog.csdn.net/linsongbin1/article/details/47781187 MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq. ...

  3. 远端WEB服务器上存在/robots.txt文件

    解决方案: 1. 可直接删除(可参考:http://zh.wikipedia.org/wiki/Robots.txt) ,但不利于SEO等 2. 修改Web服务器配置 可以通过Web服务器(如Apac ...

  4. lombok 配置使用以及优势

    maven依赖 <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> ...

  5. HDU 5942 Just a Math Problem 容斥 莫比乌斯反演

    题意:\( g(k) = 2^{f(k)} \) ,求\( \sum_{i = 1}^{n} g(i) \),其中\( f(k)\)代表k的素因子个数. 思路:题目意思很简单,但是着重于推导和简化,这 ...

  6. centos6.8使用脚本一键搭建apache+svn服务

    服务器环境: 脚本如下: #!/bin/bash yum install wget -y mv /etc/yum.repos.d/*.repo /tmp wget -O /etc/yum.repos. ...

  7. sudo: /usr/libexec/sudo/sudoers.so must be only be writable by owne

    1. chmod 644 sudoers.so 2. pkexec chmod 0440 /etc/sudoers

  8. 51nod1667 概率好题

    基准时间限制:4 秒 空间限制:131072 KB 分值: 640  甲乙进行比赛. 他们各有k1,k2个集合[Li,Ri] 每次随机从他们拥有的每个集合中都取出一个数 S1=sigma甲取出的数,S ...

  9. 【51NOD-0】1137 矩阵乘法

    [算法]简单数学 [题解] 对于A*B=C C中第i行第j列的数字由A中第i行和B中的j列的数字各自相乘后相加得到. 所以两个矩阵能相乘要求A的列数等于B的行数,复杂度为O(n3). #include ...

  10. 【洛谷 P2742】【模板】二维凸包

    题目链接 二维凸包板子..有时间会补总结的. #include <cstdio> #include <cmath> #include <algorithm> usi ...