昨天某个新手又抛出来个问题:为什么找不到 django-admin 可执行程序?我一看这不是Python高频问题之一吗1

就问他PATH是怎么设置的,结果他把django-admin 复制到了site-packages/django/bin下面。这就相当荒谬了,lib/site-packages下面放的是库文件,这里是不可能会有bin存在也不会有可执行程序在这里面的,当然,你随便放在哪,只要加到PATH里面了就肯定能工作。那么试问为何不把django-admin原本所在位置加到PATH里而要用这么蹩脚的方法呢?

答案不言而喻,肯定又是从百度搜索结果里面排名不算低的某个所谓码农站点得来的,这里并不是对百度有偏见,谷歌也不一定搜不到这些结果,但百度的排名算法多少有推波助澜的作用。

除了日常喷一下这些劣质教程复制来粘贴去的做法,我也仔细的想了想,发现这种现象的存在是有背后的逻辑的。首先,这些解决方案都出自水平不高的作者,或者高手的菜鸟阶段。他们喜欢把所有遇到的具体问题的解决方法记录下来,生怕以后忘了,比如「Django 遇到 DJANGO_SETTINGS_MODULE错误怎么办?」「如何将Ubuntu上的Python升级到Python 3?」「安装了Nginx但是打不开首页怎么办?」,这些解决方案,有的可能是根据网络上的线索胡乱尝试,正好work的步骤而已。你又不得不佩服他们做事的认真,能把每个步骤都记录下来。这就好比上数学课,一道应用题的解法可以有很多种,有的甚至你能试几个整数就能得到答案,那么我能把这题的题解写成「尝试数字3, 5,满足题设,此即答案」吗?显然不能。这中对于某题有用的方法,不能推及其他题目,所以考试,同样的套路,换几个数字,就不会做了。网上的这些低质的回答,就属于这种无效的解法记录。作者缺乏对问题的解决路径的归纳和提炼,所以只好遇到一个记录一个。但那些能归纳和提炼的答案呢?它们往往已经不针对某个具体问题了,标题已经抽象为「如何解决包寻找不到的问题」。另一方面,一个新手在遇到一个问题的时候,也只是把错误信息复制到搜索框里,得到的结果也肯定是那些针对具体问题的解决方法。缺乏提炼的问题,搜索到的也肯定是缺乏提炼的答案。

那么这个现象如何解决呢:

  1. 尝试观察问题的规律,搜索的时候去掉具体情况的信息,比如「Python ModuleNotFound」是一个不错的搜索关键词,比「Python Django导入失败」要好。
  2. 实在提炼不了规律,请人工筛选搜索结果来源,Github, StackOverflow是你的首选。
  3. 没有找到答案,尝试到StackOverflow去提问,和社区的人的交流能让你发现你的问题所在,学会下次如何提一个好的问题。
  4. 不要去记录这些具体问题的解决方法2,这对你的提升不大。而应该把遇到的相似问题,总结起来写一篇文章,能锻炼逻辑思维和归纳概括能力。
  1. 这个问题解决方法是有套路的,可以参阅我之前写的文章你的 Python 包都装到哪了?

  2. 类似的,收集代码片段也没有什么太大的意义,捕蛇者说几位主创如是说