混乱的 Python

jopen 9年前

混乱的 Python

常言道,Python 真谛之一是:

There should be one– and preferably only one –obvious way to do it.

才怪。虽说我不好说 Python 具体处于哪一种阵营,但它确实相当「混乱」。不信?且听我一一道来。

版本大跃进

世界上最远的距离之一是,我用 Python 2, 您用 Python 3.

不过, 在前三百六十的热门 Python 项目中,支持 Python 3 的已经超过 85% 了 ,好事一桩。

版本管理和虚拟环境

关于Python 的版本和开发环境管理 一口气介绍了种种版本管理和虚拟环境:Pyenv, Virtualenv, VirtualenvWrapper, Pyenv-Virtualenv, Pyenv-VirtualenvWrapper. (让我喘口气先

这还不够,Python 3.4 突然蹦出全新的 Pyvenv 来。

网络库

Python 2 同时有官方模块 urllib , urllib2 , 彼此独立; urllib3 , urllib4 出自民间;最后一个 urllib5 就纯属搞怪的了:

Once there was urllib. Then there was urllib2. Then there was urllib3. And if you look at PyPI, you even find urllib4. If you want to have all of them, use urllib5. Or you know, have a nice urllib in the standard library. But that would be too easy. SCNR. HTH. lol

到 Python 3, urllib 更是分裂成几个模块:

  1. urllib.request for opening and reading URLs
  2. urllib.error containing the exceptions raised by urllib.request
  3. urllib.parse for parsing URLs
  4. urllib.robotparser for parsing robots.txt files

其实大家更爱用民间的 requests… 如果官方能用 request 一劳永逸地换掉那些「乱伦」的 urllib 系列就好了。

包管理

请看 Python Packaging 编年史 ,Disqus 里还有我的强力・补充。

我还顺便在 #archlinux-cn 吐槽了 Python 的包管理,超级宇宙无敌之霹雳笨猫发话了:

[Felix Yan] 有兴趣的话,可以分别试试 find /usr/lib/python2.7/site-packages -maxdepth 1 -name “ .egg-info” -type f | wc -l 和 find /usr/lib/python2.7/site-packages -maxdepth 1 -name “ .egg-info” -type d | wc -l

[Felix Yan] 前者是 distutils 安装的结果,后者是 setuptools

我试了下,结果令我大吃一惊,还在用包管理(石)器 distutils 的居然有 20 个!笨猫耸耸肩,表示因为「有些开发者觉得 setuptools 的新功能没啥用而已」。

Written with StackEdit .