python模块导入_Python模块及其导入

一、模块

1、模块的定义:

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,

很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

2、使用模块的好处:

<1> 提高了代码的可维护性,其次,可以被其他地方引用。

<2> 使用模块可以避免函数名和变量名冲突。

3、模块分类

分为三种:

<1> 内置标准模块(又称标准库)执行help('modules')查看所有python自带模块列表。

<2> 第三方开源模块,可通过pip install 模块名 联网安装。

<3> 自定义模块

4、模块调用的方法

import module

from module import xx

from module.xx.xx import xx as rename

from module.xx.xx import

注意:模块一旦被调用,就相当于执行了另一个py文件里的代码。

5、自定义模块

所谓自定义模块,就是创建了一个.py文件,就可以称之为模块,可以在另一个程序里导入。

6、模块查找路径

自定义模块只能在当前路径下的程序里才能导入,换一个目录再导入自己的模块就报错说找不到了, 这是为什么?

这与导入路径有关

import sys

print(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']

python解释器会按照列表顺序去依次到每个目录下去匹配你要导入的模块名,只要在一个目录下匹配到了该模块名,就立刻导入,不再继续往后找。

注意:列表第一个元素为空,即代表当前目录,所以你自己定义的模块在当前目录会被优先导入。

7、开源模块安装与使用

https://pypi.python.org/pypi 是python的开源模块库,如何从这个平台上下载代码呢?

1.直接在上面这个页面上点download,下载后,解压并进入目录,执行以下命令完成安装

编译源码 python setup.py build安装源码 python setup.py install

2、直接通过pip安装pip3 install paramiko #parmiko 是模块名

pip命令会自动下载模块包并完成安装,软件一般会被自动安装你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 #alex_sayhi是模块名

二、包(package)

└── my_proj

├── crm #代码目录

│ ├── admin.py

│ ├── apps.py

│ ├── models.py

│ ├── tests.py

│ └── views.py

├── manage.py

└── my_proj #配置文件目录

├── settings.py

├── urls.py

像上面这样,一个文件夹管理多个模块文件,这个文件夹就被称为包。

crm/views.py内容

def sayhi():

print('hello world!')

通过manage.py调用

from crm import views

views.sayhi()

执行manage.py,pthon3中可以执行,但python2会出问题。包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。

在crm目录下创建一个空文件__int__.py ,再执行一次就可以了。

注意,在python3里,即使目录下没__int__.py文件也能创建成功,猜应该是解释器优化所致,但创建包还是要记得加上这个文件 。

跨模块导入

如何实现在crm/views.py里导入proj/settings.py模块呢?

直接导入会报错找不到模块。

因为路径找不到,proj/settings.py 相当于是crm/views.py的父亲(crm)的兄弟(proj)的儿子(settings.py),

settings.py算是views.py的表弟啦,在views.py里只能导入同级别兄弟模块代码,或者子级别包里的模块,

根本不知道表弟表哥的存在。该怎么做呢?

添加环境变量,把父亲级的路径添加到sys.path中,就可以了,这样导入 就相当于从父亲级开始找模块了。

#crm/views.py中添加环境变量

importsys ,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 importsettingsdefsayhi():print('hello world!')

注意;此时在proj/settings.py写上import urls会有问题, 因为现在的程序入口是views.py , 你在settings.py导入import urls,

其实相当于在crm目录找urls.py,而不是proj目录,若想正常导入,要改成如下:

from proj import urls #proj这一层目录已经添加到sys.path里,可以直接找到

print('in proj/settings.py')

三、绝对导入和相对导入

├── __init__.py

├── crm

│ ├──__init__.py

│ ├── admin.py

│ ├── apps.py

│ ├── models.py

│ ├── tests.py

│ ├── views.py#from ..proj import settings

├── manage.py

└── proj

├──__init__.py

├── settings.py#from .import urls

├── urls.py

└── wsgi.py

#views.py里代码

from ..proj importsettingsdefsayhi():print('hello world!')print(settings.DATABASES)

这样执行会报错。

在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。

否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。

文件夹被python解释器视作package需要满足两个条件:

文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。

不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

所以这个问题的解决办法就是,既然你在views.py里执行了相对导入,那就不要把views.py当作入口程序,

可以通过上一级的manage.py调用views.py。

from .. import models会报错的原因是,这句代码会把manage.py所在的这一层视作package,但实际上它不是,

因为package不能是顶层入口代码,若想不出错,只能把manage.py往上再移一层。

#正确的代码目录结构如下

packages/├──__init__.py

├── manage.py#from my_proj.crm import views

└── my_proj

├── crm

│ ├── admin.py

│ ├── apps.py

│ ├── models.py

│ ├── tests.py

│ ├── views.py#from . import models; from ..proj import settings

└── proj

├──__init__.py

├── settings.py

├── urls.py

└── wsgi.py

再执行manage.py就不会报错了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《2018-2019世界智能手机AI智商测试报告》发布会将在京举办

《2018-2019世界手机AI智商测试报告》发布会将于2019年11月21日在北京举行&#xff0c;本次发布会由中国科学院虚拟经济与数据科学研究中心、中国科学院大数据挖掘与知识管理重点实验室和天府大数据国际战略与技术研究院联合主办。智能手机作为人们与外界即时连接的终端设备&am…

软件需求分析文档模板_小议管理软件需求分析

从事管理软件设计&#xff0c;一般都是从用户需求分析开始。从事软件工作的&#xff0c;大概谁都知道需求分析的重要性&#xff0c;可能大部分人都吃过需求分析不充分的亏。兵法云&#xff0c;“谋定而后动”。对一个项目而言&#xff0c;需求分析应该是“谋”的一部分&#xf…

python日期格式转换_python中有关时间日期格式转换问题

每次遇到pandas的dataframe某列日期格式问题总会哉坑&#xff0c;下面记录一下常用时间日期函数.... 1、字符串转化为日期 str—>date import datetime date_str 2006-01-03 date_ datetime.datetime.strptime(date_str,%Y-&m-%d) 这是单个字符串的转化&#xff0c;其…

38页PPT深度解析:半导体设备产业链全景图

来源&#xff1a;平安证券要点摘要&#xff1a;1、我国半导体设备市场空间大&#xff0c;增长动力强劲。半导体设备主要用于半导体制造和封测流程&#xff0c;分为晶圆加工设备&#xff08;核心为光刻机、刻蚀机、薄膜沉积设备&#xff09;、封装设备和检测设备。2018年全球半导…

android actionbar 背景,Android应用开发之定制页面背景及Actionbar overflow menu的背景色...

本文将带你了解Android应用开发之定制页面背景及Actionbar overflow menu的背景色&#xff0c;希望本文对大家学Android有所帮助定义theme和style, 注意是actionOverflowMenuStyle 和 android:windowBackground.(实测5.1.1和7.1.1)style/CustomActionOverflowMenuStyleandroid:…

python周天为一周的开始_周天-和周天相关的内容-阿里云开发者社区

商朝商高勾三股四玄五勾股定理昔者周公问于商高曰&#xff1a;“窃闻乎大夫善数也&#xff0c;请问昔者包牺立周天历度——夫天可不阶而升&#xff0c;地不可得尺寸而度&#xff0c;请问数安从出&#xff1f;”商高曰&#xff1a;“数之法出于圆方&#xff0c;圆出于方&#xf…

XGBoost参数调优完全指南(附Python代码)

XGBoost参数调优完全指南&#xff08;附Python代码&#xff09;&#xff1a;http://www.2cto.com/kf/201607/528771.html https://www.zhihu.com/question/41354392 【以下转自知乎】 https://www.zhihu.com/question/45487317 为什么xgboost/gbdt在调参时为什么树的深度很少就…

科技基建,自主创芯——详解全球半导体制造行业格局

来源&#xff1a;芯潮今天推荐一份报告&#xff0c;详解全球半导体制造行业格局&#xff0c;本报告从以下几个角度进行分析&#xff1a;一、全球半导体制造市场规模及竞争格局全球半导体制造市场及行业格局中国半导体制造行业情况二、半导体制造制程技术分析28纳米是生命周期相…

python按行读取文件取消空白行_python去掉空白行的多种实现代码

测试代码 jb51.txt 1:www.jb51.net 2:www.jb51.net 3:www.jb51.net 4:www.jb51.net 5:www.jb51.net 6:www.jb51.net 7:www.jb51.net 8:www.jb51.net 9:www.jb51.net 10:www.jb51.net 11:www.jb51.net 12:www.jb51.net 13:www.jb51.net 14:www.jb51.net 15:www.jb51.net 16:www.…

android 大视图风格通知栏,Android中使用Notification实现宽视图通知栏(Notification示例二)...

Notification是在你的应用常规界面以外展现的消息。当app让系统发送一个消息的时候&#xff0c;消息首先以图表的形式显示在通知栏。要查看消息的详情须要进入通知抽屉(notificationdrawer)中查看。通知栏和通知抽屉html(notificationdrawer)都是系统层面控制的&#xff0c;你能…

python二维码生成器制作中报错为oserror_Python生成:OSError:[WinError 193]%1不是有效的Win32应用程序...

在检查了其他相关的线程之后&#xff0c;我不得不打开这个线程。尝试运行this repository时&#xff0c;我总是收到错误&#xff1a;Traceback (most recent call last): File "C:\Users\jjj\evrpogmrl\main.py", line 1, in from Environment import environment Fi…

计算机、数学、运筹学等领域32个重要算法

来源&#xff1a; 深度学习与机器视觉奥地利符号计算研究所&#xff08;Research Institute for Symbolic Computation&#xff0c;简称RISC&#xff09;的Christoph Koutschan博士在自己的页面上发布了一篇文章&#xff0c;提到他做了一个调查&#xff0c;参与者大多数是计算机…

怎么用python表白_如何正确使用Python进行表白?这是个值得思考的问题!

提到程序员&#xff0c; 可能每个同学都认识一个—— 爱穿格子衬衫、冲锋衣&#xff0c;爱宅着敲代码的程序员或者准程序员&#xff0c; 他们仿佛永远在bug和debug的路上&#xff0c; 还总爱自黑自己是“单身狗”&#xff0c;如何正确使用Python进行表白&#xff1f;这是个值得…

iOS 高阶

1.UIStoryBoard 2. segue跳转传值 3. UIColor配色 //1. 十进制配色 [UIColor colorWithRed:163.0/255.0 green:148.0/255.0 blue:128.0/255.0 alpha:1.0]; //2. 设置16进制颜色(同上) [UIColor colorWithRed:0xba/255.0 green:0x21/255.0 blue:0xd5/255.0 alpha:1.0]; 4. XML解…

android 顶部标签切换,Android实现底部切换标签

本文实例为大家分享了Android实现底部切换标签的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下实现底部通用切换标签 &#xff0c;嵌套Fragment&#xff0c;方便自定义布局自定义控件&#xff1a;widget_tab_view.xmlandroid:layout_width"match_parent"a…

simulink显示多个数据_Matlab/Simulink与自动驾驶(ADAS)算法开发

Simulink是如何存在自动驾驶的开发过程中&#xff1f;废话少讲&#xff0c;让咱们开始娓娓道来&#xff01;自动驾驶的开发架构是什么&#xff1f;自动驾驶软件开发基础的架构&#xff0c;逃不出我们经常所说的三大法宝&#xff0c;感知--- 决策(规划)--- 执行(控制)&#xff0…

数字孪生智慧城市建设加速5G+产业AI的应用,全流程数据透明化及实时可控成为升级的大方向,构建智慧城市生态圈在路上!...

本视频为深圳市副市长和IDG领导在高交会智慧城市论坛上的讲话。来源&#xff1a;北京物联网智能技术应用协会 本期正文Digital Twin数字孪生&#xff1a;是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0…

Linux部署Apache ActiveMQ 5.14.1

Linux部署Apache ActiveMQ 5.14.1 简单记一下&#xff0c;下载地址 http://activemq.apache.org/download.html 一、安装JDK7以上&#xff0c;官方说明&#xff1a;http://activemq.apache.org/version-5-getting-started.html 二、创建目录&#xff1a; cd /usrmkdir activemq…

python做excel表格柱状图_Python Excel 绘制柱形图

原博文 2019-11-19 22:07 − 本文主要讲述如何使用Python操作Excel绘制柱形图。 相关代码请参考 https://github.com/RustFisher/python-playground 本文链接&#xff1a;https://www.rustfisher.com/2019/11/19/Python/Python-op-ex... 相关推荐 2019-12-08 20:02 − 利用Pyth…

管理口地址 ibm_WAN口有IP地址上不了网如何解决 WAN口有IP地址上不了网解决方法【详解】...

设置好路由器WAN口PPPoE拨号后&#xff0c;WAN口状态已经显示获得到IP地址&#xff0c;如下图&#xff1a;WAN口有IP地址上不了网怎么办但是终端设备连接路由器无法上网&#xff0c;请参考以下步骤排查。电脑需要设置为自动获得IP地址&#xff0c;如果您不清楚如何设置&#xf…