从不是一个认真和注意细节的人,但是往往却要将一个小小的看似已成规律的问题弄出个所以然来,就因为这样,往往折腾很长时间。

一件事情,要么不做,要么做好,做好一件事情是非常难得,但是至少在做事情的时候,将这些蕴含的一些流程和原理搞清楚,这对我这种没有追求的人,也就足矣。

    其实有一些问题,我在以前的博客里面写过,也提到过,但是我没有多想,只是为了说明一个问题,或者是得到答案,但是这似乎不是一种好的方法。好的方法应该是问题解决了,然后将自己视为一个评论家,大谈阔论一番,这样也能表达自己的见解,不管错对,但是尽量以自己的观点去表达,按自己的理解去组织语言,好好畅所欲言一番,一次例会上,领导也说道了评论这个词,我们不仅仅要将自己的东西弄好,还要敢于评论那些不好,这样才能更加全面的认识某一个东西。要作为一个评论家,谈何容易,这不是一朝一夕之功,更何况,一个评论家还要有渊博的学识,不然自己都不知道别人写的错对,那还如何评论,评论不是挑是非,只是别人的一家之言而已,也只不过是自己的看法而已,所谓横看成岭侧成峰,出发点不一样,对一个东西的评价也不一样,是非曲直都会有,关键就看如何去分析,如何去对待。

    当然这里我不是想要评价一个东西,只是想谈一些自己的想法,人有的时候就是闲的无聊,居然能在工作的时候想一些事情,如果非要找一个理由,我觉得”在工作中思考,是为了更好的工作“,暂且用这个牵强附会的说法吧。

    有的时候发现工作很被动,受制于人,如果米国人不给提供一些资料,我就无从下手,久而久之觉得这不是一种办法,人应该在工作几年后学会淡定,而我却不是一个淡定的人,因为米国人给的东西是我们的第一手资料,这样我们才能深入开展下来的工作,就好比,一个刚学Java开发的人,JDK半天都没配置好,还怎么开发?例子可能不怎么样,但也算中肯,因为当年我学习Java的时候,遇到过,所以记忆幽深,至今不忘,当然当时并不知道配置这个是为了什么,但是经过自己的不断学习,终于知道了原因,因为知道了为什么,所以在以后的使用过程中,也就不在出现问题。

     话题又扯远了,还是回来吧,近日拿到了一个python的包,但是不知怎么部署才好,如果是C#的dll,这个我们都应该很清楚,添加引用即可,而python的包就是一个文件夹,里面有很多py结尾的文件,记得以前在博客中写过python搜索的顺序,在这里我想说下自己的想法,其实很多语言在在使用其他库或者包或者dll里面的功能,这些语言都有自己寻找这些的顺序,其实我觉得这个问题我们应该很早的就发现,而不是现在,所以我只能用惭愧这两字描述自己,我们写程序的时候,因为是二次开发,其实很多时候都是调用系统的功能或者第三方SDK的功能,但是当程序运行的时候是如何和这些连接起来呢?了解了这个,那么我们在部署应用程序的时候也就有了一定的规律可循,要不然在部署程序的时候或者引用其jar包,类库的时候出现找不到的情况。

      我相信我要表达的意思已经很清楚了,想要说的也差不多了,再啰嗦一句,在使用任何东西的时候都多思考,思考其运行机制等,当然这是我从程序这上面说的,其它的我也没资格去讨论。

  现在就说我问题的解决方法吧,我是直接将python的包放到了site-packages文件夹下,然后在python命令行中import的时候就可以找到了,不信的话,自己尝试下!

以图为证:

python搜索的顺序是:

1,当前路径 (以及从当前目录指定的sys.path)(这句是我猜测的在python.exe运行的时候,会自动把当前目录添加到sys.path中);

2,然后是PYTHONPATH;

3,python编译器所在的位置

     既然知道这个顺序了,那我们就应该知道如何做了,在这里要提到一个 .pth的文件,一般我们可以将自己用到的包的地址写在这个文件中,然后将这个文件放到site-packages目录下,当python.exe在运行的时候发现了site-packages下的.pth文件会将里面的路径包含到python的搜索顺序中。如果注意看的话,ArcGIS的先关包的位置就是放在这个pth文件中的。

上一幅图看下sys.path,包含哪些东西,不只有什么想法:

都说到这个份上了,我就多说写,python的模块和包的区别。

 

模块

一个.py文件就是一个python模块。

我上面提到了包,但是一直没说,其实就是一个文件夹,这个文件夹用有一堆py文件也就是模块,当然这些py文件可能是有某种关系的,在这个文件夹中在放上一个__init__.py文件,这样这个文件夹就构成了一个python 包,python包可以嵌套,包里面的我们就说是字包,是不是跟java的package有点像,没错,看来学东西的时候多思考,多联系,用以学过的东西其实也是可以解释的。__init__.py文件可以为空,不过,一般它时而会包含一个__version__的变 量,保存这个包的版本信息,另外还有一个__all__的列表,包括要import 时要导入的模块。当然,__init__.py的内容不是绝对的,也可以什么都不写,还可以加上其它任何自己认为需要的代码。

python如何导入

相信你已经见过了import 和from... import,但是它们是有区别的:

import module会导入module这个模块里的所有标识,只要import了,我们就可以引用它的任何公共的函数、类或属性,但是这些标识现在都在module名字空间下,调用的时候必须用这种写法moudle.add()等。

from module import *也会导入module中所有标识,但是标识不在module名字空间下了,也就是任何只要不是以”_”开始的东西都会被导入,它放到在当前名字空间里。并且,这句话执行完之后,当前名字空间中并不存在 module这个标识,也就是任何只要不是以”_”开始的东西都会被导入。from ... import ...语句还可用于从一个模块中导入部分标识,写法是"from module import 标识名",这样就只有指定的标识被导入,这种方式可以精确控制导入的内容,防止导入整个模块造成名称污染。

 

我说的说完了,你们扔砖吧!

 

 

 

 

posted on 2013-05-12 20:38  醉意人间  阅读(301)  评论(0编辑  收藏  举报