模块的导入

模块的种类

1、内置模块
2、自定义模块
3、第三方模块
 
注意:
py:里面叫模块
其他:里面叫类库
 

模块的存在方式

1、先导入,后使用。
2、大模块就是文件夹,小模块就是文件。
 
 

模块的使用方式

 1 1、导入整个模块,并定义别名  (单模块的导入,推荐使用方式)
 2 import module1 as s1
 3 
 4 调用方法:module1.login()
 5 as:是别名,也是s1.login()
 6 
 7 
 8 
 9 2、导入指定目录下的模块,并定义别名
10 import dir_name.module1 as s2
11 调用方法:dir_name.module1.logout()
12 
13 
14 
15 3、导入模块,并定义别名:
16 import day5_1.master as s3
17 调用方法:s3.master()
18 
19 
20 
21 4、导入非sys.path目录下的模块:
22 sys.path.append('D:\\')
23 import order
24 调用方法:order.producer("alex")
25 
26 
27 
28 5、用from导入指定函数:(单模块的导入)
29 from s4 import login
30 调用的时候:login()
31 
32 注意:
33 只导入s4中的指定函数,python不会将所有s4代码加载到内存中。
34 而是只将s4中的login的函数加载到内存里

 

模块名的重要性

1、不要跟内置模块一个名。
2、不要重复模块名。
3、按照规范,大模块创建文件夹,小模块使用文件。

 

跨目录导入模块

一、跨目录导入的特点:

1、要通过环境变量找到调用的模块:
2、不能写死,以免跨平台的时候无法调用:
3、sys.path目录,可以使用sys.path.append('D:\\')将指定目录的模块添加到path列表里(类似于环境变量)

1 D:\软件\pychar\data\s13\day5
2 D:\软件\pychar\data
3 D:\软件\py3.5\python35.zip
4 D:\软件\py3.5\DLLs
5 D:\软件\py3.5\lib
6 D:\软件\py3.5
7 D:\软件\py3.5\lib\site-packages   #第三方安装模块目录

 

 

二、思路:
1、找到自己的路径:(相對路徑)
1 print(__file__)
2 
3 D:/软件/pychar/data/s13/Atm/bin/atm.py

 

2、动态的获取到程序的绝对路径(绝对路径)

1 import os
2 print(os.path.abspath(__file__))
3 
4 D:\软件\pychar\data\s13\Atm\bin\atm.py

 

3、获取当前目录。不要当前文件:(找到父集目录)

1 import os
2 print(os.path.dirname(os.path.abspath(__file__)))
3 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
4 
5 D:\软件\pychar\data\s13\Atm\bin
6 D:\软件\pychar\data\s13\Atm

 

4、将当前目录加入到变量里:

 1 import sys,os
 2 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 3 for i in sys.path:
 4     print(i)
 5 sys.path.append(BASE_DIR)
 6 sys.path.insert(0,BASE_DIR)
 7 
 8 print('\n')
 9 ft = "{:*^100s}".format('添加BASE_DIR后的sys.path路径')
10 print(ft)
11 print('\n')
12 
13 for i in sys.path:
14     print(i)

 

 1 显示结果:
 2 D:\软件\pychar\data\s13\Atm\bin
 3 D:\软件\pychar\data
 4 E:\python35\python35.zip
 5 E:\python35\DLLs
 6 E:\python35\lib
 7 E:\python35
 8 E:\python35\lib\site-packages
 9 ***************************************添加BASE_DIR后的sys.path路径***************************************
10 D:\软件\pychar\data\s13\Atm
11 D:\软件\pychar\data\s13\Atm\bin
12 D:\软件\pychar\data
13 E:\python35\python35.zip
14 E:\python35\DLLs
15 E:\python35\lib
16 E:\python35
17 E:\python35\lib\site-packages
18 D:\软件\pychar\data\s13\Atm

 

第三方模块的下载和安装

 参考文献:http://www.cnblogs.com/wupeiqi/articles/5501365.html

一、安装方式:

(一)、pip3:(类似于yum、rpm安装方式)
eg: pip3 install  requests

 

 

 

(二)、源码安装:

 

c、进入目录:
cd D:\mysql-app\python-app\requests-requests-v2.18.1-16-g49c44a0\requests-requests-49c44a0
 
 
d、安装软件:
python3  setup.py install
 
 
e、导入python中
import requests

 

 

import的本质

一、定义:
1、模块:(1)、用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),
                (2)、本质就是.py结尾的python文件
                (3)、文件名:test.py,对应的模块名:test
2、包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)
3、常见的用法:
1 (1)、指定绝对路径的login模块导入check_auth功能函数
2 from shopping.core.login import check_auth,check_admin
3 
4 (2)、从core目录下开始导入login模块
5 from core import login
6 
7 (3)、当前目录的login模块下导入check_auth功能函数
8 from .login import check_auth

 

 

二、import的本质:(路径搜索和搜索路径)

(一)、导入的语法格式:
 1 1、import  模块名:
 2 eg :import tset    (test=‘test.py all code’)
 3 实例:
 4 import dy
 5 dy.set()
 6 dy.atc()
 7  
 8 2、from 模块名  import 方法:
 9 eg:from test  import name   (name='alex')
10 实例:
11 from dy import atc
12 atc()

 


(二)导入的类型和本质:

导入有两种类型:模块 、
1、导入模块的本质:就是把python文件解释了
2、导入包的本质:(路径搜索和搜索
(1)就是执行该包下的__init__.py
(2)路径搜索的位置为>>> import sys sys.path (从第一个逐步往后
(3)如果是夸模块导入,则需要添加导入模块的绝对路径到sys.
(4)import + 模块名,要通过from去寻找 ’包名‘,然后在import ’.py‘ 的模块文件。
1 mport sys,os
2 x = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
3 # sys.path.append(x)
4 sys.path.insert(0,x)
5 print(sys.path)

 

导入方法

(一),相同目录下的模块导入:

1、import   module_name             #导入本地单个模块
调用方式:module_alex.say_hello()  
                  module_alex.logging() 

2、import module1_name,module1_name   #导入本地多个模块
调用方式:module1_alex.say_hello()   
                  module2_alex.logging() 

#注释:凡是from开始的导入模块都可以直接调用
3、from module_alex import *    #不推荐使用,如果模块名称相同,就会备覆盖掉(重名时本地模块优先,因为后者会覆盖掉前者的内存地址)
调用方法:say_hello()
                   logging()

4、from module_alex import logging   #导入module_alex模块下的,logging方法。
调用方法:logging()


5、from module_alex import logging  as m1   #导入module_alex模块下的,logging方法,并自定义别名
调用方法:m1()

 

 (二)、不同目录的模块导入:(重点)

a、添加路径:
import sys,os
x = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# sys.path.append(x)
sys.path.insert(0,x)
print(sys.path)

b、导入模块:
from bin import test
from bin import foo
from conf import conf
from logs import slow_log
c、调用方法: slow_log.slow() conf.pz() print(test.name) test.loggin() test.mgs() foo.logger() foo.say_hello() d、显示结果: ['D:\\PyCharm\\data\\s13\\Atm', 'D:\\PyCharm\\data\\s13\\Atm\\core', 'D:\\python3.5\\lib\\site-packages\\setuptools-18.1-py3.5.egg', 'D:\\python3.5\\lib\\site-packages\\pip-7.1.0-py3.5.egg', 'D:\\PyCharm\\data', 'D:\\python3.5\\python35.zip', 'D:\\python3.5\\DLLs', 'D:\\python3.5\\lib', 'D:\\python3.5', 'D:\\python3.5\\lib\\site-packages'] log目录下的slow_log模块中slow方法 conf目录下的conf配置文件 bin目录下的test模块中name变量 bin目录下的test模块中loggin方法 bin目录下的test模块中mgs方法 bin目录下的foo模块中logger方法 bin目录下的foo模块中say_hello方法



 

 

(三)、同级目录下导入包:

(三)、同级目录下导入包:

1、设置包下的init路径:         
from . import test
from . import foo

2、与包同级的文件中调用:
#导入bin包下的test模块
from bin import test

#调用test模块下的方法:
方法一:
import bin
bin.test.loggin()
bin.test.mgs()

方法二:(推荐)
from bin import test
from bin import foo
test.loggin()
foo.logger()


3、显示结果:
python
不同目录下的登录模块测试
同级模块导入测试
 

 

导入优化

 一、优化:

1、在多个函数调用同一个模块中方法时,可以用  from 模块名   import  方法,这样可以减少扫描次数从而提高代码效率。

 1 import test
 2 def log():
 3     test.loggin()
 4     print('log调用test.loggin的方法')
 5 
 6 def user():
 7     test.loggin()
 8     print('user调用test.loggin的方法')
 9 
10 log()
11 user()
12 
13 
14  可以变成:
15 from test import loggin
16 
17 def log():
18     loggin()
19     print('log调用test.loggin的方法')
20 
21 def user():
22     loggin()
23     print('user调用test.loggin的方法')
24 
25 
26 log()
27 user()

 

2、频繁调用同一个可以定义一个调用变量:

 1 import test
 2 loggin = test.loggin
 3 def log():
 4     loggin()
 5     # print('log调用test.loggin的方法')
 6 
 7 def user():
 8     loggin()
 9     # print('user调用test.loggin的方法')
10 
11 
12 log()
13 user()

 

 

 python程序的目录划分:

 

├── README
├── atm #ATM主程目录
│   ├── __init__.py
│   ├── bin #ATM 执行文件 目录
│   │   ├── __init__.py
│   │   ├── atm.py  #ATM 执行程序
│   │   └── manage.py #ATM 管理端,未实现
│   ├── conf #配置文件
│   │   ├── __init__.py
│   │   └── settings.py
│   ├── core #主要程序逻辑都 在这个目录 里
│   │   ├── __init__.py
│   │   ├── accounts.py  #用于从文件里加载和存储账户数据
│   │   ├── auth.py      #用户认证模块
│   │   ├── db_handler.py   #数据库连接引擎
│   │   ├── logger.py       #日志记录模块
│   │   ├── main.py         #主逻辑交互程序
│   │   └── transaction.py  #记账\还钱\取钱等所有的与账户金额相关的操作都 在这
│   ├── db  #用户数据存储的地方
│   │   ├── __init__.py
│   │   ├── account_sample.py #生成一个初始的账户数据 ,把这个数据 存成一个 以这个账户id为文件名的文件,放在accounts目录 就行了,程序自己去会这里找
│   │   └── accounts #存各个用户的账户数据 ,一个用户一个文件
│   │       └── 1234.json #一个用户账户示例文件
│   └── log #日志目录
│       ├── __init__.py
│       ├── access.log #用户访问和操作的相关日志
│       └── transactions.log    #所有的交易日志
└── shopping_mall #电子商城程序,需单独实现
    └── __init__.py


 

 

 

 

 

 

 

 

posted @ 2017-12-19 15:04  风之岚翔  阅读(996)  评论(0编辑  收藏  举报