python包导入记录

 

 解决问题方面了解import

1.如果导入的模块和主程序在同个目录下,直接import就行了

2.如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件,该文件使得python解释器将子目录整个也当成一个模块,然后直接通过“import 子目录.模块”导入即可。

3.如果导入的模块是在主程序所在目录的父目录下,则要通过修改path来解决,有两种方法:

(1)通过”import sys,sys.path.append('父目录的路径')“来改变,这种方法属于一次性的,只对当前的python解释器进程有效,关掉python重启后就失效了。

(2)直接修改环境变量:在windows中是 “ set 变量=‘路径’  ” 例如:set PYTHONPATH=‘C:\test\...’ 查看是否设置成功用echo %PYTHONPATH%,而且进到python解释器中查看sys.path,会发现已经有了新增加的路径了。这 种方式是永久的,一次设置以后一直都有效。在linux中是 "export 变量=‘路径’ “,查看是" echo $变量 "

通过修改path是通用的方法,因为python解释器就是通过sys.path去一个地方一个地方的寻找模块的。

 

注意:项目中文件夹和包的区别

    文件夹下面有__init__.py文件,则文件夹是包

    否则就是文件夹

 

自定义的外部模块使用则,需要用sys.path.append('/home/bao/py'),里面的参数是自定义的python的路径地址

然后才能调用from  包名称 import class名称引入自定义的类

 

 

 

原理上了解import

一、sys.path :保存系统引入的classpath的路径信息(包括主模块的路径,python的home路径,pythonpath路径等 )

模块的搜索路径都放在了sys.path列表中,如果缺省的sys.path中没有含有自己的模块或包的路径,可以动态的加入(sys.path.apend(路径的绝对路径))即可。下面是sys.path在Windows平台下的添加规则。

二、sys.modules: Python中所有加载到内存的模块都放在sys.modules

三、import原理:

 Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。

 如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。

四、模块导入后的使用情况

  import只能导入模块,不能导入模块中的对象(类、函数、变量等)。如一个模块A(A.py)中有个函数getName,另一个模块不能通过import A.getName将getName导入到本模块,

 只能用import A,然后调用用A.getName来使用。如果想只导入特定的类、函数、变量则用from A import getName即可

 import 的时候,如果后面跟着是包路径,则modules中存放的是包路径下__init__.py文件路径

如果后面跟着是模块,则modules中存放的是模块的文件路径

 

 

 

猜你喜欢

转载自username2.iteye.com/blog/2319645
今日推荐