为MAC打造舒适的Python开发环境

最近准备着手新的Django项目,想着建立新的virtualenv开发环境,再又考虑到尝试使用Python3+的可能,google了一些MAC上建立多版本Python开发环境的文章,尝试了一些新东东,和大家分享。

不要覆盖系统自带的Python版本!

MAC系统本身自带有Python库,且和系统集成度较高,为系统稳定考虑,无特殊需求不要覆盖系统自带的Python库。

若有疑问可google各种覆盖系统带来的奇葩问题。

配置栈

1. Xcode Command Line Tools

这是MAC开发上必备的工具库,提供gcc/llvm编译库及工具,没有这个是无法在MAC上编译相关程序的。如果MAC没做过开发机或新升级,请安装更新该工具库。

可在developer.apple.com登录后下载安装包安装,或在app store下载xcode安装,或运行下面命令行尝试安装

$ xcode-select --install

检查安装是否成功

$ xcode-select -p
/Applications/Xcode.app/Contents/Developer #显示此结果则说明已安装成功

或运行gcc查看工具版本

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

特别声明,若你有靠谱VPN,下面请全程开启……

2. MAC下软件包安装管理工具brew(ruby)

MAC下软件包安装管理工具常用 MACports / brew,两者优劣如何选择请自行google判断,这里用的是brew。

由于brew是基于ruby开发,因此需要基本的ruby环境。如果你对ruby开发相关毫无兴趣,可通过Ruby官网下载包直接安装。若有可能使用ruby开发或尝试ruby环境下的各种程序请使用更规范的ruby环境配置程序——rvm

$ curl -sSL https://get.rvm.io | bash
$ source ~/.rvm/scripts/rvm

检查是否安装正确

$ rvm -v
rvm 1.26.11 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

安装最新的ruby版本

$ rvm install 2.2.1

设置默认版本

$ rvm 2.2.1 --default

检查下

$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]

安装brew

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3. 安装 pyenv

pyenv是管理Python版本安装管理工具

$ brew install pyenv

将下面代码加入shell启动脚本 .bash_profile / .zshrc

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

重启shell

$ exec $SHELL

安装管理多版本Python常用操作

$ pyenv install --list  # 查看可安装版本
$ pyenv install 2.6.9
$ pyenv install 2.7.9
$ pyenv install 3.4.3
$ pyenv versions 
* system (set by /Volumes/Home/linnchord/.pyenv/version)
  2.6.9
  2.7.9
  3.4.3
$ pyenv uninstall 2.6.9 # 移除
$ pyenv global 3.4.3    # 设置为全局,覆盖系统,慎用!
$ pyenv global system   # 恢复系统版本
$ pyenv local 3.4.3     # 设置当前目录生效Python版本
$ pyenv local --unset   # 取消
$ pyenv rehash          # 安装新版本或其他软件包后需运行
$ pyenv shell 3.4.3     # 设置当前脚本生效版本

4. 安装 pyenv-virtualenv

pyenv-virtualenv 是作为 pyenv 一个插件存在的虚拟环境管理工具,它统一将虚拟环境配置到 ~/.pyenv/versions。

$ brew install pyenv-virtualenv

将下面代码加入shell启动脚本 .bash_profile / .zshrc

eval "$(pyenv virtualenv-init -)"

重启shell

$ exec $SHELL

常用管理操作

$ pyenv virtualenv 3.4.3 env343
$ pyenv virtualenv 2.7.9 venv279
$ pyenv virtualenvs                 # 显示当前虚拟环境列表
env279 (created from $HOME/.pyenv/versions/2.7.9)
env343 (created from $HOME/.pyenv/versions/3.4.3)

$ ls ~/.pyenv/versions
2.7.9  3.4.3  env343 venv279

$ pyenv activate env343             # 激活指定虚拟环境
$ pyenv deactivate                  # 关闭当前虚拟环境
$ pyenv uninstall env343            # 删除

5. 开发流程

$ pyenv virtualenv 3.4.3 newproject
$ pyenv activate newproject
$ pip install -r reuirements.txt
$ mkdir newproject
$ cd newproject

Code lucky!

惨剧…

春节回家,完全忘了主机付费,被BuyVM直接移除了,数据资料全部丢失……

还好强大的互联网拥有传说中的时光机器,购买了DigitalOcean的主机,缓慢恢复中……

美剧

老婆爱看美剧。

情节紧凑、剧情跌宕起伏、表演到位,还可以加上诸多赞语,华丽、震撼、神剧等等。不过这些优点就是它最大的缺点,在这样激烈而诱人的剧情节奏下尽然能不断演化n集+n季,绵绵不绝,这实在不是一个正常人能待的世界。

所以美剧我通常只看第一季,然后就会自然而生巨大的疏离感而远离。

uwsgi 1.9+ mountpoint error

最近团队开发新产品,顺带折腾更新了服务器和整个开发环境版本。

运行python的服务uwsgi从0.9+升级到了最新的1.9+,发现一个bug,折腾了我一个通宵……

uwsgi原有的版本,vhost模式下,可以在nginx中配置SERVER_NAME来指定服务名。


location / {
    include uwsgi_params;
    uwsgi_pass unix:/var/run/uwsgi-python/sock;
    uwsgi_param UWSGI_PYHOME /usr/local/pyenv/app;
    uwsgi_param UWSGI_CHDIR  $document_root;
    uwsgi_param UWSGI_SCRIPT app_name:app;
    uwsgi_param SERVER_NAME app_name;
}

该配置会指定服务名并在uwsgi启动日志中显示

WSGI app 0 (mountpoint='app_name')

但是在最新的uwsgi v1.9.12中,该配置失效,无法正确的配置mountpoint,日志会显示

WSGI app 0 (mountpoint='')

这会导致访问指定地址时在不同的app之间跳来跳去,无法正常使用。经测试1.9.12~1.9.7均存在同样问题,1.9.5版本以下会指定server+port替代

WSGI app 2 (mountpoint='domain_name:8080|')

我在github上提交了该bug,https://github.com/unbit/uwsgi/issues/321,作者修复之前建议大家先使用1.9.5版本。

NOTE:
作者已经修复了该bug,不过仍使用了server+port的模式,不知道是出于什么理由。目前版本已更新到1.9.13,通过pip install -U uwsgi可更新安装。

密尔沃基市警察局官网

也许是有史以来最华丽的警察局网站,非常棒的视差滚动效果。我特别测试了一下低版本浏览器,IE7依然有效,很棒!

U5388P2T1D7638635F13DT20120920135843