TechSoup~TechSoup;-)期待这篇文章能解决所有Pyenv核心困惑。snipPyenv是一个Python项目环境隔离/控制器,最基本的使用:基于官方仓库安装:$gitclonehttps://github.com/yyuu/pyenv.git~/.pyenv并配置到环境中:$echo'exportPYENV_ROOT="$HOME/.pyenv"'>>~/.bash_profile$echo'exportPATH="$PYENV_ROOT/bin:$PATH"'>>~/.bash_profile然后就可以自由控制运行环境了:安装目标版本,例如:pyenvinstall2.4.2复制一个项目环境:pyenvvirtualenv2.4.2242proj设置当前目录默认使用新环境:pyenvlocal242proj可以完成上面三个链接的配置:free以及不分系统安全安装,根据不同项目自用Python版本环境,运行时根据相似项目自由安全绑定不同Python,自由绑定同一个pip模块依赖树的Python运行时后台为什么有环境控制工具成功h作为Pyenv?当你开始学习Python时,你可能最惊讶/震惊/自豪地发现大多数操作系统都内置了Python运行环境。也就是说,我们不需要专门安装它。事实上,从我们接触到计算机的那一刻起,我们都有一个完整可用的Python版本环境。因为Python实在是太好用了,无论是哪个系统厂商,都有大量的内置工具/软件依赖于Python,所以都是预装的。。。那么,这也带来了一个问题:systemPython环境是很多依赖系统的软件所需要的环境。绝不能轻易破坏。否则,导致系统崩溃,就等于把我们自己的电脑给害死了。。。其实很多教程涉及到安装Python模块也是如此。不负责任的提示使用sudo命令是临时将用户权限提升为系统管理员命令的结果。普通人很难控制。当然,windows系统本身就是一个单人系统,并没有严格区分系统权限和用户权限。所以看来系统python环境可以在windows自由使用发展和学习,其实只是另一种缓慢的自杀问题。因为Python发展时间太长,中间有太多意想不到的决定,开源项目也不禁止大家去探索……所以,现在任何系统中的Python运行环境都可能是乱七八糟的……asxkcd:PythonEnvironment中有描述...但是,对于普通的学习者/用户,一般只想解决几个问题:与系统环境隔离运行Python时,不要触及系统自身的依赖sPython版本隔离Python是哪个版本你想用吗?不用担心谁会干扰项目模块依赖隔离。不同项目之间用pip安装的模块是相互独立的。可以自由升级/降级/删除/...,不影响自己的开发/那么经过多年的摸索,Pyenv恰好是解决上述问题的利器。Pyenv就像项目名:PythonenvironmentPython环境~控制器,控制着核心的两个环境:Python版本环境,也就是Python2.1/3.1这个大版本的Python运行模块依赖环境,也就是说,特定项目依赖的大量第三方模块那么,如何以最短的流程进入Pyenv的世界,享受可控的Python环境呢?pyenv-installerpyenv/pyenv-installer:这个工具是用来安装pyenv和friends的。第一次安装,建议使用官方安装器,不管是homebrew还是其他的东西,跟Pyenv没有直接关系,而且brew在国内还是很冷门的。。。然后Cryatspeed。。。如何验证pyenv安装成功了吗?$环境|greppyenvPYENV_ROOT=/pointto/your/of/.pyenvPATH=...:/pointto/your/of/.pyenv/shims:/pointto/your/of/.pyenv/bin:...使用env来检查系统环境变量是否包含pyenv需要的两个关键配置$pyenvpyenv1.0.3-535-g17f44b7cUsage:pyenv[]Someusefulpyenvcommandsare:CommandsListallavailablepyenv命令local设置或显示本地特定于应用程序的Python版本global设置或显示全局Python版本shell设置或显示特定于shell的Python版本install使用python-builduninstall安装Python版本卸载特定Python版本rehashRehashpyenvshims(安装可执行文件后运行)version显示当前Python版本及其原始版本'获取有关特定命令的信息。有关完整文档,请参阅:https://github.com/pyenv/pyenv#readme运行pyenv以提供标准使用帮助。这样,就意味着安装了pyenv-virtualenvwrapper。pyenv/pyenv-virtualenvwrapper:一种从pyenv管理virtualenvs的替代方法。安装Pyenv目前要使用多版本的Python环境,所以必须安装这个插件。安装非常简单:$gitclonehttps://github.com/pyenv/pyenv-virtualenvwrapper.git$(pyenvroot)/plugins/pyenv-virtualenvwrapper是gitclone操作,然后在系统环境中配置:exportPATH="~/.pyenv/bin:$PATH"eval"$(pyenvinit-)"eval"$(pyenvvirtualenv-init-)"在原来的pyenv后面加一行,启动virtualenv-init即可;thesystemenvironment这个词见过很多次了,不过大部分文档都没有解释这是什么东西...pyenv没用过....Systemenvironment->Systemenvironment是的,只是env命令报错,当前系统运行时使用的所有全局变量因为配置是系统当前使用的,所以必须有一个仪式/指令来更新它。我们不可能去修改/自动更改~/.bash_profile这样的系统配置文件。可以自动加载的仪式指令是:$source~/.bash_profilesource~resource是的,这个资源命令就是加载系统所有资源的命令。如果你在安装Pyenv之后从来没有执行过这个命令,那么只有下次电脑重启的时候你才能真正加载最大的pyenvCommonbuild坑来了...常见构建问题·pyenv/pyenvWiki是官方wiki的第一篇文章,也就是这篇文章。为什么?因为我们希望Python版本环境是免费的,和系统隔离的,所以简单的复制系统是不可能的。如果你有环境可以使用,你可以自己编译一个新的Python给自己使用。问题是:就地编译一个Python版本,依赖什么?直观上当然需要额外的支持……毕竟Python是用C语言编写的C软件的编译需要一堆相关依赖模块的源码支持。否则无法进行编译……这就是很多人安装Pyenv后无法安装新Python版本的根本原因:巧妇难为无米之炊。智能化,Python不可能无中生有的创建与系统关联的第三方模块的源码。幸运的是,Python编译依赖常用的基础模块,无论是哪个系统,都有对应的开源仓库,可以快速安装;对于macOS,只需要:$brewinstallopensslreadlinesqlite3xzzlibonly,前提是提前配置了XCodeCommandLineTools:$xcode-select--install因为,所有的编译工作实际上都是使用XCode进行的,否则,会不兼容macOS环境。。。使用好了,以上准备就绪,其实只有3步:安装pyenv,和pyenv-Virtualenvwrapper插件检查,激活Pyenv准备当前编译环境,那么接下来使用会很顺利;-)安装新的Python环境:$pyenvinstall--list可用版本:2.1.32.2.32.3.7...stackless-3.4.7stackless-3.5.4来看看pyenv支持多少个版本环境?有数百个,这是其他工具无法做到的。安装Python3.7.4环境:$pyenvinstall3.7.3python-build:useopenssl@1.1fromhomebrewpython-build:usereadlinefromhomebrewDownloadingPython-3.7.3.tar.xz...->https://www.python.org/ftp/python/3.7.3/Python-3.7.3。tar.xz....查看安装结果:$pyenvrehash$pyenvversions*system3.7.3注意:*system表示当前目录使用系统python环境...复制一个项目环境:$pyenvvirtualenv3.7。3373camp在链接中查找:/var/folders/pl/8rsjzmjn2ybgd71lwqf3lxw80000gn/T/tmp_qtmj124要求已满足:/Users/zoomq中的设置工具/.pyenv/versions/3.7.3/envs/373camp/lib/python3.7/site-packages(40.8.0)要求已经满足:pipin/Users/zoomq/.pyenv/versions/3.7.3/envs/373camp/lib/python3.7/site-packages(19.0.3)因为这个3.7.3的环境本身就是干净纯Python,作为家长,在其他项目中复制环境是正确的想法;同时,也是因为pyenv复制了安装好的环境,不需要编译,所以速度非常快。查看复制结果:$pyenvversions*system3.7.33.7.3/envs/373camp绑定到当前目录:?system?~/mnt/_historic/101.camp/_video??pyenvlocalcamp373?camp373?~/mnt/_historic/101.camp/_video?system3.7.33.7.3/envs/373camp*camp373(setby/Users/zoomq/mnt/_historic/101.camp/_video/.python-version)奇怪的提示这里出现的是阿姨本地bash配置的特殊命令行提示结构,不用管...关键是*camp373,那个*从system移到camp373之前,说明当前的运行环境已经从系统默认为刚刚复制的一个新的Python3.7.3环境,但实际上这个环境编译安装在:/Users/zoomq/.pyenv/versions/camp373并且系统和brew的安装是不同的。注意:不要轻易使用:pyenvglobal指定版本别名。这是把系统Python运行环境切换到pyenv安装的环境。。。太危险了。。。上面的总结,简单的说:Python运行开始学习/开发/测试前必须注意的时间环境,而Pyenv提供了统一简洁的命令工具,可以快速自由的:安全安装不同Python版本的环境,使用virtualenv来pyenv-virtualenvwrapper的形式提供了一系列的包依赖控制,支持我们以友好/安全的方式快速隔离不同项目的不同模块依赖。更精彩的是,配置完成后,pyenv会自动切换相应的环境。这样我们进入对应的工程目录就不用担心运行环境没有绑定这一切了。最后pyenv只是利用非常自制目录下的.python-version文件完成辅助识别,自动切换其内容。;DLPipenv/Anaconda/...其他工具呢?Python生态系统最好也是最纠结的状态之一就是任何问题都有很多优秀的解决方案而且每一个看起来都非常优秀以至于无论我们选择哪一个都好像放弃了整个世界......幸运的是,各种开源项目的文档/例子都非常友好,也有大量的对比文章可供参考。我个人的偏见:virtualenv是第一个完成环境虚拟化的;但是,运行环境绑定到项目目录,使用命令进入/退出,总体来说不够灵活。Anacoda/Miniconda是一个通用的预部署环境工具。如果我们需要快速获取现有的数百个第三方大型模块的环境,那么使用Anacoda。否则还是用Pyenv比较好,当然如果想省去Python版本环境的编译,可以安装Miniconda代替Pyenv的installPython过程。然后,在conda版本环境下,使用Pyenv管理项目模块依赖。问题是conda环境的进入/退出必须使用命令来完成,而且进入后,runningPython不是直接使用而是必须condarunpythonmyscript.py这个比较傻。。。pipenv看名字就知道它专注于点子的管理。虽然,对于项目模块状态管理来说比较灵活,但是,进入/退出,必须手动指示,在环境中运行,也必须使用pipenvrunpythonmyscript.py的形式,当然,有些人不喜欢Pyenv自动切换环境的行为,认为venv是不可控的这是官方内置的虚拟环境工具,只针对Python3,没有人用。。。poetry也是一个类似pipenv的包依赖控制工具,它确实不包含Python版本环境管理参考:如何畅玩Python·Yixuanpyenv/pyenv:简单的Python版本管理pyenv/pyenv-installer:这个工具是用来安装pyenv和friends的。*[Homepyenv/pyenvWiki](https://github.com/pyenv/pyenv/wiki)*[常用构建问题pyenv/pyenvWiki](https://github.com/pyenv/pyenv/wiki/Common-build-problems)自己python环境设置总结[mac][ubuntu]-Qiitapyenv和pyenv-virtualenv环境搭建-QiitaPluginspyenv/pyenvWiki*[pyenv/pyenv-virtualenvwrapper:一种从pyenv管理virtualenvs的替代方法。](https://github.com/pyenv/pyenv-virtualenvwrapper)有效的Python环境:让自己在家——真正的Pythonpython——venv、pyvenv、pyenv、virtualenv、virtualenvwrapper、pipenv等之间有什么区别?-StackOverflowPocket:简化您的Python开发环境我的Python开发环境,2018年版|JacobKaplan-MossPyenv+Virtualenv+Virtualenvwrapperpython环境管理-S.MonaenvPyenvformepyenvmodestenvironment:?pyenvversionssystem2.7.102.7.10/envs/uC27102.7.122.7.12/envs/dama27122.7.152.7.15/envs/leo27153.6.33.6.3/envs/AI3633.6.3/envs/DU3633.6.3/envs/du4pos3.7.03.7。0/envs/leo3703.7.33.7.3/envs/373camp3.7.3/envs/Django3733.7.3/envs/camp3733.7.3/envs/pycon373373campAI363DU363Django373*camp373(由/Users/zoomq/设置mnt/_historic/101.camp/_video/.python-version)dama2712du4posleo2715leo370pycon373uC2710PS:当前课程对应公众号PythonCamp101camp。暂定栏目是:DM阿姨呵呵~文字快吐槽心情...NC嗯哼python营~图文/图片关于课程信息SS学生故事~每个课程都发生的真实“血案”TS技术汤~好:guru101camp@googlegroups.comNN3778PythonCamp?:Python入门课||玻璃||幻灯片||维基百科101camp3py每周101camp3py进行中190922191003即将结束