# Python环境入坑记 理想很美好,现实很骨干..... Goal : Office PC -> Install Vmware & CentOS -> Pythoner But : Settings -> how to root -> how to install git -> how to talk to unblock openssh -> how to use zsh -> how to use oh-my-zsh -> how to use atom -> libsecret error -> still in keng -> how to install pyenv -> how to make it work -> how to make shell work for me -> how to config -> where is shortcut? -> how to blog -> how to use Chinese input -> how to know linux very well -> linux books & shell programming learning Crazy But: -> pyenv install do not work here -> pool internet -> need another way -> mirror -> pip install do not work here too -> pool internet -> need antoher way -> mirror again On My MAC -> why there are so many pythons? -> what is anaconda python -> which python am i using -> how to clean them all -> how to make them all works for me as I want? 每一个箭头都是一段入坑出坑,也许还有没出来的坑的经历。踩的坑多了,也就不觉得自己在坑里了。今天梳理一下Python环境相关的问题和坑,作一个经验总结。 ## 环境假设 前情提要是:你有一台MAC 或者Linux 系统环境,已经安装了zsh 和 Oh-my-zsh ,下一步准备和python 一起愉快的玩耍。你肉身在墙内,由于种种网络环境的限制还不一定能够完全自由的站在墙外。使用的环境主要以python3 为主,但是语言这件事情,总是越自由一些越好不是么?也就是说最好可以对python 的环境进行有效的管理。 ## 理论知识 pyenv virtualenv -> pyenv -> anaconda python -> zsh/bsh/csh -> internet 在一台Linux中可以安装多个版本的Python,但是系统默认的一般都只有一个,所以你需要一个可以管理多个版本python的软件来总体管理。如果你对Windows系统比较熟悉,可以类比一台Win下安装了一个虚拟机,在这个虚拟机里,你想怎么搞都行。 还有一个环境变量的概念,当有多个python的时候,系统调用哪一个python,或者系统如何找到你的“虚拟机”,调用“虚拟机”里的python,都需要在环境变量里用环境变量的方式做明确的说明。 还有一个很坑的事情是python的很多一手资源获取的速度非常非常的慢,不知到为什么。解决办法有两个,翻出去,或者找一个国内的镜像。 之前我也推荐给小伙伴安装anaconda套件,这样就可以不管各种环境问题了,这是一个初级的处理方案,当你开始对python 有更多了解有更多定制话的需求之后,当初盲目安装的anaconda反而成了“不可承受之重”,因为自己压根不知到anaconda默默的做了哪些系统配置的改动。 除了python的哪些坑,其实shell本身也有一些坑,在启用了zsh之后,原来的一些环境变量需要进行调整,因为最终zshrc会调用一部分其他环境变量,还有一些是在zshrc自己做的配置。不同的顺序也会导致不一样的效果呢。 以上,基本是这篇博客里最精简和基础的理论知识了。如果你看不懂,没关系,直接按照下面的一步一步做吧。 ## 坑点精讲 ### 环境变量 #### 文件 涉及到的文件 /etc/profile /etc/bashrc /etc/zshrc ~/.profile ~/.bash_profile ~/.bashrc ~/.zshrc #### 语法和实例 export PATH="/home/leon/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/home/leon/bin:/usr/local/sbin:/usr/sbin:/sbin" eval "" eval "$(pyenv init -)" * [eval usage explan](http://www.unix.com/man-page/posix/1posix/eval/) #### 常用命令 $ env $ printenv - 展示环境变量配置文件的内容 $ set - 展示所有的变量 ## Reference * [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv) * [pyenv](https://github.com/pyenv/pyenv) * [Linux enviromental variables intro](https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps) * [diffence between pyenv and pyenv-virtualenv](https://stackoverflow.com/questions/41573587/what-is-the-difference-between-venv-pyvenv-pyenv-virtualenv-virtualenvwrappe) * [Ubuntu Official Environment Variables Intro](https://help.ubuntu.com/community/EnvironmentVariables) * []()