模块引入
一、模块
分类:
1、内置模块
2、自定义模块
3、第三方开源模块
二、导入基础之sys.path
需要导入的包/模块的位置必须在sys.path中。在自定义模块中需要将路径加入sys.path。
1 import os 2 import sys 3 4 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 根据实际进行调整 5 sys.path.append(BASE_DIR)
三、导入方法
1 import os 2 import sys as my_sys 3 from collections import deque 4 from collections import Counter as ct 5 6 print(os.path.abspath(__file__)) 7 # D:\Python相关\python_project\test.py 8 print(my_sys.path) 9 # ['D:\\Python相关\\python_project', 'C:\\Python\\Python36\\python36.zip', 'C:\\Python\\Python36\\DLLs', 'C:\\Python\\Python36\\lib', 'C:\\Python\\Python36', 'C:\\Python\\Python36\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm 2017.3\\helpers\\pycharm_matplotlib_backend'] 10 print(deque("abcdefg")) 11 # deque(['a', 'b', 'c', 'd', 'e', 'f', 'g']) 12 print(ct("hellow world")) 13 # Counter({'l': 3, 'o': 2, 'w': 2, 'h': 1, 'e': 1, ' ': 1, 'r': 1, 'd': 1})
(相对导入:待补充。)
1 my_os = __import__("os") 2 print(my_os.path) 3 # <module 'ntpath' from 'C:\\Python\\Python36\\lib\\ntpath.py'>
1 import importlib 2 3 my_os = importlib.import_module("os") 4 print(my_os.path) 5 # <module 'ntpath' from 'C:\\Python\\Python36\\lib\\ntpath.py'>
1 # ############# 文件1 ############## 2 # 放入os.environ,仅在本系统有效。key:USER_SETTINGS,value:config.settings 3 os.environ["USER_SETTINGS"] = "config.settings" 4 5 6 7 # ############# 文件2 ############## 8 # 使用 9 settings_module = os.environ.get("USER_SETTINGS") 10 if not settings_module: 11 return 12 m = importlib.import_module((settings_module))
四、应用实例
1、例1

1 import os 2 import sys 3 4 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 根据实际目录调整BASE_DIR 5 sys.path.append(BASE_DIR) 6 # print(sys.path) 7 # [...。, 'D:\\Python相关\\python_project\\模板\\template'] # 已加入sys.path 8 9 from conf import settings 10 from core.a.b import test 11 print(settings.name) 12 # i am settings.py 13 print(test.name) 14 # i am core.a.b.test.py
1 name = "i am settings.py"
name = "i am core.a.b.test.py"
2、例2

1 import os 2 import sys 3 4 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 5 sys.path.append(BASE_DIR) 6 7 os.environ["USER_SETTINGS"] = "config.settings" # 告诉系统,用户自定义的settings路径 8 from lib.conf.config import settings # 从自定义模块lib.conf.config导入变量settings 9 10 if __name__ == '__main__': 11 print(settings.NAME1) # 根据settings上的定义顺序,用户自定义的变量NAME1覆盖了global_settings 12 print(settings.NAME2) # NAME2没被覆盖,则生效
1 NAME1 = "user_define_settings"
1 NAME1 = "global_settings" # 被覆盖了 2 NAME2 = "global_settings_2"
1 from . import global_settings # 导入global_settings 2 import os 3 import importlib 4 5 6 class Settings(object): 7 def __init__(self): 8 # ############## 找到默认配置global_settings ############## 9 for name in dir(global_settings): # 遍历global_settings的变量 10 if name.isupper(): # 如果变量为大写,则是settings里定义的变量。global_settings的变量名约定俗成为大写。 11 value = getattr(global_settings,name) 12 setattr(self,name,value) # 把key:name,value:value的赋给Settings 13 14 15 # ############## 找到自定义配置,比默认配置优先级高,因此放在下面,下面的会覆盖上面的 ############## 16 # 根据字符串导入模块 17 settings_module = os.environ.get("USER_SETTINGS") # 在start.py已把用户自定义settings导入到environ变量,现结合importlib导入模块 18 if not settings_module: 19 return 20 m = importlib.import_module((settings_module)) 21 for name in dir(m): # 与上面的gloabl_settings类似 22 if name.isupper(): 23 value = getattr(m,name) 24 setattr(self,name,value) 25 26 27 settings = Settings() # 实例化

浙公网安备 33010602011771号