Python模块的导入以及软件开发规范
Python文件的两种用途
1 . 当脚本直接使用,直接当脚本运行调用即可
def func():
print("from func1")
func()
2 . 当做模块被导入使用,但是又想测试当前脚本是否能正常运行就是用if name == 'main':
def func():
print("from func1")
if __name__ == '__main__':
func()
绝对导入和相对导入
我们在创建包时,是给别人导入引用的,而在包的内部也会有彼此之间的互相导入的需求,这时候就有了,相对导入和绝对导入
绝对导入:以包名做为起始
相对导入:用.或者..的方式作为起始(只能在一个包中使用,不能用于不同的目录内)
目录关系:
glance/ # 顶层包目录
├── __init__.py
├── api # 子层 api
│ ├── __init__.py
│ ├── policy.py
│ └── versions.py
├── cmd # 子层 cmd
│ ├── __init__.py
│ └── manage.py
└── db # 子层 db
├── __init__.py
│
└── models.py
run.py
文件内容:
#policy.py
def get():
print('from policy.py')
#versions.py
def create_resource(conf):
print('from version.py: ',conf)
#manage.py
def main():
print('from manage.py')
#models.py
def register_models(engine):
print('from models.py: ',engine)
例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py
在glance/api/version.py
#绝对导入
from glance.cmd import manage
manage.main()
#相对导入..上两层目录
from ..cmd import manage
manage.main()
当模块包的路径不在一起时,可以直接将模块包glance_v1的上级路径加入到环境sys.path路径中
import sys
sys.path.append(r"C:\Users\Dpad\PycharmProjects\python\module")
import glance_v1
glance_v1.get()
软件开发规范:
一个项目应该由多个目录文件组成,每个目录存在配置的不同意义:
├── ATM
│ ├── bin # 程序启动目录 (start.py执行程序文件)
│ │ ├── start.py
│ ├── core # 程序主逻辑目录
│ │ └── src.py
│ ├── conf # 程序配置目录
│ │ ├── settings.py
│ ├── db # 程序数据目录
│ │ ├── mysql
│ ├── lib # 程序包管理目录
│ │ ├── glance_v1
│ │ └── common.py
│ ├── log # 程序日志目录
│ │ ├── acess.log
└───────└
在bin执行start.py文件下,想调用所有项目目录下的程序需要将ATM的路径加入到sys.path路径中:
cat /ATM/bin/start.py
import sys,os
# os.path.abspath(__file__) # 表示当前程序文件start.py所在位置;
# os.path.dirname(os.path.abspath(__file__)) # start.py所在位置的上级目录
# os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # start.py所在位置的上上级目录,也就是ATM所在目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
Python模块的导入以及软件开发规范的更多相关文章
- Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)
Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...
- python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)
一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...
- python之模块、包的导入过程和开发规范
摘要:导入模块.导入包.编程规范 以My_module为例,My_module的代码如下: __all__ = ['name','read'] print('in mymodule') name = ...
- python中软件开发规范,模块,序列化随笔
1.软件开发规范 首先: 当代码都存放在一个py文件中时会导致 1.不便于管理,修改,增加 2.可读性差 3.加载速度慢 划分文件1.启动文件(启动接口)--starts文件放bin文件里2.公共文件 ...
- Python 3 软件开发规范
Python 3 软件开发规范 参考链接 http://www.cnblogs.com/linhaifeng/articles/6379069.html#_label14 对每个目录,文件介绍. #= ...
- python(37)- 软件开发规范
软件开发规范 一.为什么要设计好目录结构? 1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 2 ...
- python软件开发规范&分文件对于后期代码的高效管理
根据本人的学习,按照理解整理和补充了python模块的相关知识,希望对于一些需要了解的python爱好者有帮助! 一.软件开发规范--分文件 当代码存在一个py文件中时: 1.不便于管理 (修改,增加 ...
- day16 循环导入、模块搜索路径、软件开发、包的使用
day16 循环导入.模块搜索路径.软件开发.包的使用 1.循环导入 循环导入:循环导入问题指的是在一个模块加载/导入的过程中导入另外一个模块,而在另外一个模块中又返回来导入第一个模块中的名字,由于第 ...
- Python 入门之 软件开发规范
Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...
随机推荐
- GridView item设置点击背景
GridView item设置点击背景 android:listSelector="@android:color/transparent"
- mac环境下支持PHP调试工具xdebug,phpstorm监听
先让php支持xdebug 方式一: https://xdebug.org/download.php 下载相应的xdebug 可以到http://xdebug.org/wizard.php 把php ...
- 网络爬虫re模块的findall()函数
findall()函数匹配所有符合规律的内容,并以列表的形式返回结果. a = '"<div>指数' \ '</div>"' word = re.finda ...
- nginx proxy_set_header设置、自定义header
先来看下proxy_set_header的语法 语法: proxy_set_header field value; 默认值: proxy_set_header Host $proxy_host; pr ...
- codeforces 461div.2
A Cloning Toys standard input/output 1 s, 256 MB B Magic Forest standard input/output 1 s, 256 M ...
- 用Openssl计算ECDSA签名
ECDSA的全名是Elliptic Curve DSA,即椭圆曲线DSA.它是Digital Signature Algorithm (DSA)应用了椭圆曲线加密算法的变种.椭圆曲线算法的原理很复杂, ...
- appium+java(二)appium初始化参数部分详解
Capabilities介绍 实际上它的全称是:Desired capabilities Desired capability是一个JSON对象,包含一组key和value值.它由客户端发送给服务端, ...
- tensorflow中文教程
飞机票--->走你~~~ 飞机票 http://blog.csdn.net/lenbow/article/details/52152766
- Confluence 6 已经存在的安装配置数据库字符集编码
针对已经存在的 Confluence 安装,如果你安装的 Confluence 版本是 6.4 或者早期的版本,我们在安装的时候没有检查你数据库的字符设置. 如果你的数据库当前没有被配置使用 UTF- ...
- android 使用opencv
1.将已有的项目名称改名字,但一直报错 Error:A problem occurred configuring project ':app'.> executing external nati ...