模块的导入
模块的种类
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文件
(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