python在import时做了什么

最近几天有一些工作上的资料统计,需要用到python的一个包,而这个包的logger,是作为全局变量写死的,不能传入参数,也无法在类定义里重载。修改这个包的源代码不是一个好方案,琢磨来琢磨去,总算琢磨明白了,只要在import之后,直接module.xyz.log = my_own_log就可以了。

在琢磨的过程中弄明白了,python的import,原来是这样干的!

################################
################################

A,import module.xyz:

1)查看sys.modules是否有module:
       如果有,什么也不做

       如果没有,看看pyc缓存里有没有:

           如果有,而且代码文件没变,就从pyc缓存里读取
           如果没有,运行module的代码文件,可以是module.py,
               也可以是__init__.py(所谓的package),然后运行xyz的代码,
               生成所有对象的名称和内存引用的dict表,装入sys.modules,同时,
               写入了一份缓存.pyc文件。

2)将module和module.xyz写入本地空间,用dir()可以查看;

B,from module.xyz import abc 时,则运行1),没有2),而仅仅把abc装入本地空间。

C,from module.xyz import * 时,则运行1),没有2),把所有对象装入本地空间。

在ABC三种情况下,都运行了1),并不想我之前想的C是最浪费资源的。

所谓的本地空间,每个module都有一个__dict__,保存了所有的对象。dir方法,其实就是__dict__.keys()。locals()或者globals()方法,都是在做类似的工作。python就用最基础的dict和list,解决了看似很复杂的战斗。

import就是只运行一次代码并写入sys.modules以及酌情写入本地空间。只有importlib.reload方法会重新读取代码文件覆盖载入module,否则无论怎么重复import,都不会发生任何事情,但是,这所有的东东,都可以手工读写。

如果有一个包不支持外部配置文件,你在用的时候要覆盖内部配置文件怎么办?

# ############################
# ############################

import nicepackage.org_config
import my_config

for i in dir(my_config):
    if i[0] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
        nicepackage.org_config.__dict__[i] = my_config.__dict__[i]

import nicepackage.nicemodule

随着__init__.py文件的不同,上述代码可能需要修改。这里配置文件内的对象名一律是大写的。

如此简单的注入,但如果不深入的琢磨加上机缘巧合,可能再过若干年都无法想到。

python充满了魔法和陷阱,很多高手写的教程里都没有讲魔法,可能是怕这些魔法对新手而言是陷阱吧。在大型的正规的软件工程里,类似于本文的土办法应该是根本不会出现的。

在写上述内容的时候觉得对于python豁然开朗了。作为跟谭浩强同志学过C语言的业余菜鸟,十多年来写代码都是方法加变量,几千行也是这样,也解开了很久以来对OO的困惑:

从前有一个骑士和一只怪兽相依为命,作战谋生,有一天捡到了一本魔法书,书里有各种神龙/怪兽,还有各种技能/作战/组队方法,附录里有个字典索引,有这些怪兽的召唤语,技能的咒语,可以召唤他们战斗,还能让他们杂交,学新技能,后来,这个骑士成了王——这就是OO programming。

被迫害的小金人

在读大一的时候,遭遇过一次骗局。在银行门口,一个穿着打扮是工人的男子,讲了个故事,我就信了,把身上所有的钱,一千多元,全都给他了,他给了我一个小金人,后来仔细看,这个小金人根本不是黄金,而是某种铜制品,价值几十块。当时,除了贪念,更主要的是因为在那个故事里,他说他被迫害了,政府的人要没收他的祖传宝贝,他到银行也被人跟踪,不让他出售这个黄金制品。

当时我义愤填膺,一定要帮助他!回过头来看,一个街边的陌生人,和执政的政府,我竟然会荒谬到相信前者?到今天这种被迫害的小金人的故事,在今天仍然到处被宣传。

很多30甚至40岁以上的人,还满口都是,政府无所不在,无恶不作。从早晨起床,到晚上睡觉,所有的事情都可以和政府挂上钩。喝牛奶骂一遍,出门呼吸空气骂一遍,堵车骂一遍,上班不舒心骂一遍……高逼格一点的,外汇储备多了要骂只会卖不会投资人民血汗贬值,外汇储备降低要骂乱投资人民血汗流失,没有高铁的时候说中国落后只有绿皮车,有了高铁说铁路总公司负债太高无法回本。大部分不努力工作,也什么都做不好的LOSER就是这样一个模式,而骂政府是最CHEAP的,也不会还口,也没什么风险,还显得牛逼。这些LOSER能开启这个模式,是因为有大量的意见领袖和公知,在公开的推广这个模式,至于是善意还是恶意,还是靠这个赚钱吃饭,未可知,反正,比卖艺来钱容易,连词都不用写,胡诌就行,一般呢,都要加上一个对照,在美国,如何如何。连凤姐都能堂而皇之写专栏,在微博上指点江山,教育我们国内如何不好,美国如何好,有几个人知道她是伪造证据在美国政治避难?说是叛国都抬举了,这就是美国梦!颠覆祖国,抛弃亲人,你也能实现。互联网时代,我们越来越了解美国了,不那么好骗了。

最近wikileaks放出的希拉里丑闻邮件,说实话蛮让人震惊,很难想象民主党已经腐败崩坏到这个程度,比纸牌屋恶心一百倍。希拉里竟然还能厚着脸皮选总统,没有任何说法,反正选民也很少有去看那么多邮件的,只要整个美国媒体和科技圈都沉默就好办了,google,facebook,twitter,全部失声,一度屏蔽wikileaks,电视媒体更是绝对没有,换了是共和党,他们会炒翻天骂几年。Trump身家不过几十亿,有点媒体关系但自己没有电视台,如何跟庞大的资本集团联合体抗衡?在媒体战上,没有可能打赢,最后一定是输给希拉里。我们曾经以为只有中国共产党搞“政治正确”,搞运动,删帖子,控制舆论,其实整个美国社会都在做。

共产主义,或者说社会主义,或者说民族或宗教社会,在美国人眼里为什么可怕?因为这样的国家和社会,控制的成本更高,播点新闻放点黑幕喊点口号拉拉票,获客成本是最低的啊,连补贴和抽奖都不用啊,这才是民主的真相啊——民主是资本控制一个国家最廉价的方式。任何一国,只要民主,一定是被资本控制,搞几年如果不听话,换一个人来搞,继续给底层人民希望,如果听话,包装一下就连任。从投资的角度,凡是积极主动找到你的,绝对不会是赚钱的投资,资本家为什么要把民主送给所有人,让你以为填个表就是自己做主了呢?民主对社会底层的人,是极其不利的,封建时代还有可能遇到明君呢,选出来的党棍可能吗?你让中国共产党接受美国人做爸爸,几乎是不可能的,民主了老百姓会不会就不好说了;你让美国民主党对捐赠的大金主说不,几乎是不可能的,中国共产党是绝对可以。如果民主了,投票了,选举委员会有一万种办法欺骗选民,美国人当爹几乎是一定的,反正上台了又不用兑现,看看伊拉克,有后悔药吃吗。

绕来绕去,美国就是那个从政治和利益两方面诱惑着全世界的小金人,而我们不能永远像少年时那般幼稚。在这个土地上,中国政府的信息最可信,中国共产党是最为人民着想的,如果不是,那也绝对不是美国政府。停止一切抱怨,努力奋斗,在世界上的任何地方都是唯一出路。退一万步,就算移民了,出身无法改变,亲人不可能抛弃,去侮辱和诋毁,乃至颠覆自己的母国也是不必要的,对吧?

 

pip在windows下的配置

查到一些文章都是out的信息,原始文档是准确的:

https://pip.pypa.io/en/stable/user_guide/#config-file

配置档是:%userprofile%/pip/pip.ini

%userprofile%通常是C:/users/your_user_name/

写入:

[global]
timeout = 60
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple/

search引擎没有办法使用国内的服务器,没有一个支持的,install非常快,清华的服务器支持https,但阿里和豆瓣的加上trust-host也一样用。

安装:pip install sexgame

升级一定要小心:pip install sexgame -U –no-deps

如果不用nodeps,有些包的作者写了无数个依赖包在egg_info里,会升级大量的依赖包,而整个开源世界最让我感到恐怖的就是大面积依赖升级。有些牛逼的基础包根本很难编译成功,在windows下就跟不可能了,前几天升级了个小软件结果引发基础包升级失败,干脆重装了整个python环境。

想试试会怎样,可以下载到目录:pip install sexgame -U -d sexfolder

会下载而不是安装。其实有个模拟的选项会更好,就像以前的gentoo包管理。

马拉松是城市的性格

长春的赛事服务并不差,志愿者们也很辛苦。本文没有否定的意思。

我仅仅跑过两个马拉松,大连和长春净月潭,都是市政府挂名主办,不论赛道如何,从赛事的操办上,能看出城市的性格。

取参赛包,大连是在市民健身中心,二十多个志愿者用长桌拼成一排,好比办事的二十多个窗口,随意到任何一个人面前,拿出身份证件和报名函,签字确认,就可以领取到全部的装备,然后走人。在政府层面,我们管这叫one stop service,一站式服务。印象里一共花了2分钟不到。

长春净月潭是在旁边的一个房子里,地方的大小和志愿者人数其实没所谓,毕竟赛事的人数有数量级的差别。感觉不是志愿者,而是赞助商派人来的。流程上,分成了半马,全马,两个窗口,全马需要你拿最近一年的成绩单打印件,很多人没有,或者没打印,队列行进的很慢;签完字,交100元押金,拿计时芯片。这个芯片其实就是RFID,现在的成本能做到几毛钱,加上封装也就几块钱,收押金就是浪费大家时间。这还没完,参赛服你需要到另一个窗口去去取。前后一共花了近10分钟。这是典型的衙门口作风,各管一摊,互不相干。这还与赞助商合作有关,后面再说。

起跑发令,大连7点半发枪,分秒不差。至于前面市领导讲话那都无所谓了,她讲完话,后面就是民间组织在做事儿了。毕竟,没有市政府关怀和支持,你想搞马拉松是不现实的。所谓,政府搭台,民间唱戏。

长春是8点半发枪,8点29人群开始躁动和倒数,结果,到了8点30整,领导讲话还没完,发枪推迟了。讲到大概8点32分,主持人居然高喊了一句:“请领导入座好位置看的清楚!”这边跑者一片嘘声。主持人说,我们8点35分准时发枪!过了不到十秒,又说:“我们倒计时三分钟发枪!”最后是8点36分左右发枪的。还是衙门口风格,呵呵。

最后说赞助商,大连,所有的东西装在一个袋子里,统一发放,没见有什么不和谐。长春为什么是两个袋子,一个是某户外公司,另一个是阳光保险,猜想是主办方无法也懒得去协调。我取完参赛包出来在门口,听见一个似乎是赞助单位的人打电话,意思是你们如果总变我还怎么合作?稍微辨识能力强一些的会发现,最后的赞助商场地布置,与发放的平面图不一致,也就是说,有一部分赞助商,中途退出了。除非到了一定程度,哪个赞助商愿意退出?最可能的退出条件就是约定的资源不给你了,或者索要一个远高过约定的价格,没法向老板交差了。说到底,还是衙门口风格。

这种与赞助商的不和谐,导致跑者几乎什么都没有,是最低配的马拉松:100元押金的芯片,一张号码布(是的,只有一张),一件不太舒适的均码参赛服,一个奖牌,300元的报名费。计时地毯我只在出发和终点看见了,大概是我业余不懂吧。作为超级菜鸟,在大连马拉松跑完的时候,又冷又饿,领到了大毛巾和大香蕉,感动的都要哭了。

大家平时的工作都很累,来跑马拉松,说是拼搏,其实是都市人的一种放松,身体累了,头脑放空。衙门口风格的马拉松,还是改改吧!也许就改不了了……

长春马拉松有一个特点非常好:完赛的时候志愿者直接把奖牌挂在你脖子上。还想说一句,净月潭这么好的条件,如果天气好,赛道非常美。

垄断的滴滴会带来什么

最近多个城市出现了出租车罢工,而民间舆论一边倒的偏向于滴滴等快车平台。不知道这些人有没有想过,垄断的滴滴会带来什么?现在的滴滴们已经烂成什么样了?

老百姓对于出租车有怨气可以理解,但是大多数人并非出行工具的重度使用者,一方面没有看到出租车行业的进步,另一方面也没有看到快车行业的退步,乃至恐怖的倒向,也没有注意到,开出租和开快车的,有可能是同一伙人。其实,大部分快车司机,大部分出租车司机,都是好的,所谓服务品质,就是看谁的少部分更多。

这里单说“恐怖的倒向”,滴滴/神州专车等平台从偏向于用车者,变成了偏向于司机,不单是纵容服务质量的下降,在试探乘客的底线,而且在纵容拒载。最终,所有的司机都会变成和拒载的出租车司机一样,唯一不同的是滴滴抽走了20%。最终,滴滴垄断了,所有的乘客成了滴滴和他们的司机案板上的猪肉——出租车需要当面拒载,而滴滴们拒载只需要点一下屏幕,这种简单操作极容易传染。

最早的滴滴/快的,根本就没有取消订单这回事儿,在很长世间没有被拒载过;而神州专车,订单是系统派的,不论如何都会准时出现在需要的地方。现如今,滴滴可以随意取消订单,在高峰期,或者打车高发地,很多司机设定成自动抢单,然后开始挑单,远的就干,近的就找个理由让你取消,在我看来这比出租车拒载还恶心,同时,车辆信息对不上的太多了,你上了车,还能因为车牌或者司机对不上,不走了?神州专车由系统派单,变成了司机挑单,时间太早或太晚,没有人接单,自动接了之后,找个理由让你取消,真的太让人失望了,当神州专车开始允许拒载,这个市场就彻底烂了。有人说可以投诉啊,问题是,你的私人信息在人家手里。

滴滴等平台为什么会转向司机呢?很简单,一开始,几家打车软件竞争,乘客是上帝;后来,滴滴一家独大,如何做大司机平台这块蛋糕,成了利益所在,乘客饱和了之后,让更多的烂车,烂人,加入到司机平台,这样数字上好看,可以把估值做上去,大家都在等着享受IPO的盛宴,谁还有心思管你这些乘客?

出租车有个什么好,其他平台无法取代?和金融上一样,最重要的流动性。你总会遇到愿意拉你的,哪怕有很多拒载。互联网平台,通过智能地图计算出来这个活儿不赚钱,全统一拒载,这一天还会远吗?

淘宝为什么至今屹立不倒,是首选的购物平台,因为她至始至终是优先保护买家利益的。从2004年至今,在这个大原则上我没有感受到任何变化。滴滴和神州, 在未来,可能会更进一步,帮助司机剔除那些不赚钱的短途活儿,帮助司机避开需要早起的活儿,虽然痛心,但也乐见其死,相信会有更好的平台取而代之,互联网 生生不息。

滚动至顶部