在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。
使用模块的好处:
模块分为三类:
内置模块:又称为标准库模块,python自带的模块
第三方开源模块:从网络上导入安装的模块
自定义模块:用户自己定义的模块
模块调用方式:
import module
from module import xx
from module.xx.xx import xx as rename
from module.xx.xx import *
一旦调用模块直接执行.py里的代码
这里涉及到路径问题:
sys.path 可以返回当前模块的可以调用的路径列表
[‘‘, ‘/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip‘, ‘/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6‘, ‘/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload‘, ‘/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages‘]
第一个为空表示当前程序所在的路径,程序会从左到右依次尝试调用模块
第三方模块的安装方法分为两种:
1.下载源码安装
登录https://pypi.python.org/pypi下载后,解压并进入目录,执行以下命令完成安装
python setup.py build # 编译 python setup.py install # 安装
2.通过pip安装
pip3 install paramiko #paramiko 是模块名
软件一般会被自动安装你python安装目录的这个子目录里
/your_python_install_path/3.6/lib/python3.6/site-packages
切换模块源
pip命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多
sudo pip install -i http://pypi.douban.com/simple/ alex_sayhi --trusted-host pypi.douban.com
包就是包含_init_.py的文件夹,导入模块时必须是以包为路径导入,文件夹内的模块是找不到模块的
跨模块导入的问题:当需要导入的模块不在一个层级目录时,需要导入模块就要在环境变量中添加路径
目录结构如下
.
├── __init__.py
├── crm
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
├── manage.py
└── proj
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
根据上面的结构,如何实现在crm/views.py
里导入proj/settings.py
模块?
直接导入的话,会报错,说找到不模块
$ python3 views.py Traceback (most recent call last): File "views.py", line 2, in <module> from proj import settings ModuleNotFoundError: No module named ‘proj‘
是因为路径找不到,proj/settings.py 相当于是crm/views.py的父亲(crm)的兄弟(proj)的儿子(settings.py),settings.py算是views.py的表弟啦,在views.py里只能导入同级别兄弟模块代码,或者子级别包里的模块,根本不知道表弟表哥的存在。这可怎么办呢?
答案是添加环境变量,把父亲级的路径添加到sys.path中,就可以了,这样导入 就相当于从父亲级开始找模块了。
crm/views.py中添加环境变量
import sys ,os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__的是打印当前被执行的模块.py文件相对路径,注意是相对路径 print(BASE_DIR) sys.path.append(BASE_DIR) from proj import settings def sayhi(): print(‘hello world!‘) print(settings.DATABASES)
time模块的方法
time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
time方法转换图:
datetime模块方法:
原文:https://www.cnblogs.com/wilbur0402/p/9432329.html