导入模块的语句的三种方法:
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. Bootstrap入门(五)表单

    Bootstrap入门(五)表单   先引入本地的CSS文件  <link href="css/bootstrap.min.css" rel="stylesheet ...

  2. 制作一个功能丰富的Android天气App

    简易天气是一个基于和风天气数据采用MD设计的Android天气App.目前的版本采用传统的MVC模式构建.通过丰富多彩的页面为用户提供日常所需的天气资讯. 项目说明 项目放在github上面 地址是: ...

  3. 无线网络中,使用MDK3把指定的用户或者热点踢到掉线

    准备 1:系统环境为ubuntu16.04, 2:需要mdk3, mdk3这个软件需要通过apt安装, 需要kali系统的源 3:需要安装aircrack-ng套件 今天这套东西,可以在未连接上靶机网 ...

  4. MyEclipse - 解决 MyEclipse build workspace慢,validation javascript更慢的问题

    在这个过程中对.projet文件进行了跟踪比对,总算发现这个Build的时候进行Validation是从哪里定义的了.似乎因为我的项目是基于ExtJS2.0.2的web project,所以会提示打开 ...

  5. 使用EF扩展EntityFramework.BulkInsert实现批量插入

    EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而EntityFramework.BulkInsert则是利 ...

  6. Android EventBus 3.0 实例使用详解

    EventBus的使用和原理在网上有很多的博客了,其中泓洋大哥和启舰写的非常非常棒,我也是跟着他们的博客学会的EventBus,因为是第一次接触并使用EventBus,所以我写的更多是如何使用,源码解 ...

  7. IIS配置步骤,绝对有用,百度上的不全面,是百度的补充

    百度教程:http://www.jb51.net/article/29787.htm 参照百度教程,但是配置不成功,关键的地方来了!! 下面的也要配置设置 1. 2. 3.C:\Windows\Sys ...

  8. C语言一维数组转换为二维数组

    一维转二维代码示例: #include <stdio.h> #include <stdlib.h> #define ROW 3 #define COL 2 int main(i ...

  9. android 项目更改包名的方法

    本文章全文转载: http://www.2cto.com/kf/201304/206747.html 1.在项目上右键,选择android tools->rename application p ...

  10. java学习阶段三:运算符和结构学习

    import java.util.Scanner;/* * JAVA中运算符的学习: * 算术运算符:+.-.*./ 和 %,两个整数相除,结果还是整数. * 赋值运算符:=.+=.-=.*=./=. ...