from浅谈_引入包模块

from浅谈

一、三类引入

     自定义,第三方,内置,分别所在python位置。第三方一般默认安装在sitepackage中,内置在lib文件夹。

     导入规则,主线为sys.path列表,从前到后导入。

     1)一般第一个为py运行程序的本级目录

     2)注意 使用某些编译软件会自动添加进上一级目录,但是在cmd中import上一级的模块或包时就会报错,所以建议不使用软件默认添加的目录。

     3)因为是从前到后顺序搜索,就要求程序中 一不能有与内置或第三方模块重名的命名。二不能与其他自定义模块重名的命名,因为在引用时会先调用本级目录中的模块,导致误以为调用的是已经定义好的模块最后可能报错。“”module xxx has no attribute xxx

二、导入的语法规则

    模块 只能是py文件

    包    为包含__init__.py文件的文件目录,可以包含子包。

    1)不能引入不带有__init__.py的文件夹         

#e1为文件夹,e2func为文件 
from e1 import e2func
e2func.func()

>>> 

Traceback (most recent call last):
  File "C:\Python27\c1.py", line 3, in <module>
    from e1 import e2func
ImportError: No module named e1
>>> 

     2)文件夹中带有 __init__.py主要是为了避免将文件夹名当作普通的字符串。

         另一个应用为

package_a
├── __init__.py
├── module_a1.py
└── module_a2.py
package_b
├── __init__.py
├── module_b1.py
└── module_b2.py
main.py
  • 如果main.py想要引用packagea中的模块modulea1,可以使用:
from package_a import module_a1
import package_a.module_a1
  • 如果packagea中的modulea1需要引用packageb,那么默认情况下,python是找不到packageb。我们可以使用sys.path.append('../'),可以在packagea中的__init__.py添加这句话,然后该包下得所有module都添加* import __init_即可。

总结:1)from import 的必须是模块 包 函数或类

         2)全文中import 模块只导入一次。 而且先执行其中的表达式,然后是被引用的函数。

         3)sys.path的初始值来自于以下地方:

    包含脚本当前的路径,当前路径
    PYTHONPATH       可能就是path中的环境变量    先添加系统环境变量 PYTHONPATH 然后将路径添加。
    默认安装路径
             动态添加的方法:
import sys
import os

print sys.path
workpath = os.path.dirname(os.path.abspath(sys.argv[0]))
sys.path.insert(0, os.path.join(workpath, 'modules'))
print sys.path

 参考文章:

      http://www.cnblogs.com/lx63blog/articles/6336592.html

posted on 2017-01-21 10:38  lexn  阅读(153)  评论(0)    收藏  举报

导航