导入模块的语句的三种方法:
1、import module
2、from module import name1,[name2,name3....]
3、from module import *
先看第一种方法:import module
首先我们导入一个已经安装过的三方库
import requests
当解释器在执行上面的语句时,会到搜索路径中去找该模块然后加载并执行。
在代码中使用模块的属性时需要使用完整的表示符名称(句点属性标识):
a=requests.post(.......)
 
下面我们来看自己定义的一个简单的模块(假如我们只需要一个简单的模块):
模块路径:prefix\lib\site-packages\subpath\testIm.py
 
因为我们自己定义一个模块不在python的搜索路径中因此,在导入时报错找不到该模块:ImportError: No module named testIM。
此时我们有2个办法解决:
1、将我们的模块testIm.py移动到搜索路径中去,比如prefix\lib\site-packages目录下
2、在搜索路径中添加模块所在的路径,因为当我们需要导入的模块位于系统的搜索路径下时,我们可以直接导入模块。
方法1、很简单,直接移动
 
模块名:testIm.py,代码如下:
 class A(object):
def __init__(self,name,age):
print "A's initing"
self.name=name
self.age=age
def m_A(self):
print "m_A:name is %s " %self.name
print "m_A:age is %d " %self.age class B(object):
def __init__(self,name,age):
print "B's initing"
self.name=name
self.age=age
def m_B(self):
print "m_B:name is %s" %self.name
print "m_B:age is %d" %self.age

现在我们来测试一下导入:

 import testIm
a=testIm.A("anna",18) #输出结果为:A's initing
b=testIm.B("jim",21) #输出结果为:B's initing
a.m_A() #输出结果为:m_A:name is anna
#m_A:age is 18
b.m_B() #输出结果为:m_B:name is jim
#m_B:age is 21

发现没有报错了。

方法2、将prefix\lib\sit-packages\testImLib加入系统的搜索路径方法如下:
1 import sys
2 sys.path.append('C:\\Python27\\lib\\site-packages\\testImLib')
3 import testImNew

此时也没有报错了。

我们创建单个文件的情况并不能满足我们大部分时候的要求,更多的时候我们需要创建一个子目录,在子目录中组织我们的多个模块。如果我们导入自己创建的目录中的模块,我们就需要另一个文件的的帮忙才能正常导入我们的模块,这个文件及是__init__.py,或者也可以像前面那样,将我们创建的模块所在的路径加入到搜索路径中。如果只是单单在site-packages目录下创建了我们自己的目录,然后导入就会像前面一样报错。

对于添加目录到搜索路径,上面已经写出了方法,下面我说一下使用__init__.py进行导入。

假如在 prefix\lib\sit-packages目录下存在子目录testImLib,子目录包含testIm.py模块,即 有文件prefix\lib\sit-packages\testImLib\testIm.py
我们如果直接导入报错:
import testImLib.testIm  #输出结果为: ImportError: No module named testImLib.testIm
在子目录testImLib中引入__init__.py文件。__init__.py文件引入后testImLib就相当于是一个合法的包了。
prefix\lib\sit-packages\testImLib\中包含:__init__.py、testIm.py2个文件。__init__.py文件可以为空,也可以写入我们要的内容。
添加__init__.py文件后我们测试一下:
if __name__=="__main__":
from testImLib import testIm
a=testIm.A("anna",18) #输出结果为:A's initing

到此,顺利解决。

总结一下:

当我们创建了一个模块需要导入时,当此模块文件在系统的搜索路径下,可以直接导入;如果不在,则可以通过她添加模块所在路径到系统的搜索路径中去。

当我们创建了一个包时,一定需要__init__.py文件,这样才是一个合法的包。我们可以直接通过 from *** import ***来导入。或者我们也可以不要__init__.py文件直接将包的路径添加到搜索路径中。

基于目前的水平,可能文章中有错误或者不够清晰的地方,以后再完善。

python 中如何导入一个自己创建的模块的更多相关文章

  1. 【Spring注解驱动开发】使用@Import注解给容器中快速导入一个组件

    写在前面 我们可以将一些bean组件交由Spring管理,并且Spring支持单实例bean和多实例bean.我们自己写的类,可以通过包扫描+标注注解(@Controller.@Servcie.@Re ...

  2. python中如何统计一个类的实例化对象

    类中的静态变量 需要通过类名.静态变量名 来修改 :通过对象不能修改 python中如何统计一个类的实例化对象?? class Person: #静态变量count,用于记录类被实例化的次数 coun ...

  3. [python语法]python中如何判断一个集合是另一个集合的子集?

    问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...

  4. 8、组件注册-@Import-给容器中快速导入一个组件

    8.组件注册-@Import-给容器中快速导入一个组件 8.1 给容器中注册组建的方式 包扫描+组建标注注解(@Controller.@Service.@Repository.@Component)[ ...

  5. 关于python中文件导入的若干问题

    __init__文件 同一级目录下直接import导入就可以了,如果是在不同的目录下面被导入文件的文件夹下面必须有__init__.py文件,即使这个文件是空的也可以.当然这个文件也可以初始一些数据 ...

  6. Python中的导入

    转自:http://bingotree.cn/?p=569 参考<Python学习手册>,强烈建议看下这本书的相关章节. 在一些规模较大的项目中,经常可以看到通过imp.__import_ ...

  7. python中动态导入模块

    当导入的模块不存在时,就会报ImportError错误,为了避免这种错误可以备选其他的模块或者希望优先使用某个模块或包,可以使用try...except...导入模块或包的方式. 例如: Python ...

  8. IDEA中如何导入一个maven项目并配置相关设置

    导入一个maven项目参照如下链接 https://jingyan.baidu.com/article/b0b63dbf0c0ac04a49307078.html 要想启动这个导入的项目目前我所接触到 ...

  9. python中进程的几种创建方式

    在新创建的子进程中,会把父进程的所有信息复制一份,它们之间的数据互不影响. 使用os.fork()创建 该方式只能用于Unix/Linux操作系统中,在windows不能用. import os # ...

随机推荐

  1. 清理微信浏览网站的缓存,Cookie

    微信官方说明是取消关注,但是开发中发现取消关注缓存还是存在! 解决方法如下: 方法一: 用微信内置浏览器打开这个网页debugx5.qq.com ,就会有清除缓存的选项,如下图 方法二: 如果你用An ...

  2. CodeForces 451B

    Sort the Array Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Sub ...

  3. KB奇遇记(10):终章

    本来还想写一篇关于前CIO的著名言论,不过想想还是算了.博客空间宝贵,不乱恶心人了. 这篇博文是本系列<KB奇遇记>的最后一篇了. 虽然在KB公司有这么多的苦,但毕竟收获也很多,至少让我懂 ...

  4. tbl.js div实现的表格控件,完全免费,不依赖jquery

    html上现在有比较好用的表格控件是datatable,但是编辑.按钮等部分是收费的,只有基础功能免费.而且尺寸发生变化时需要手工刷新等繁琐操作较多.所以我开发一个免费的供大家使用. 本项目已用于&q ...

  5. jq操作img大小(动态修改)

    今天适配app页面是约到一个问题 当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸. 通过搜索,我们可以从网上找到实现此功能的jQuery代 ...

  6. HDU 3783 ZOJ

    ZOJ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. 在Window下安装Oracle

    一.Oracle下载地址 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 二.解压 ...

  8. Openstack容器项目之Magnum

    本文以Newton版本为例. 1.Magnum简介 Magnum项目通过Openstack API能够在Openstack中创建基于容器的服务,但它本身并不直接对容器进行操作,而是通过Kubernet ...

  9. Mock以及Mockito的使用

    mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/vie ...

  10. SDOI Day1

    好了做了SDOI day1的3道题,来讲下做法及感想吧 T1:排序(暴力,搜索) 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3990 我们可 ...