导入模块的语句的三种方法:
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. SuperSocket入门(二)- 探索AppServer、AppSession,Conmmand和App.config

          在上一篇文章中,我们已经了解到了如何在SuperSocket处理客户端请求. 同时我们可能会发现一个问题,如果我们的服务器端包含有很多复杂的业务逻辑,这样的switch/case代码将会很 ...

  2. ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效

    因为一些配置属性比较多,存在多组属性,因此结合xml解析.缓存技术,实现配置文化的自动解析.存入缓存.缓存依赖实时更新配置内容. 配置文件反序列化存入缓存的核心方法: public Class.Set ...

  3. JS加载相对路径脚本的方法 - 汇总

    js加载脚本的方式有很多,但是各有各的用途. 最近公司https项目改造,对于资源文件这一块,也是遇到一些问题,现在就来总结一下,怎样改造https的脚本吧~! 方法1.借助服务端语言如PHP,输入当 ...

  4. (一)Redis在windows下的安装和使用

    1.下载redis服务端,地址:https://github.com/MSOpenTech/redis/releases 包含安装程序和源码. 2.解压<Redis-x64-3.2.100.zi ...

  5. Spark:一个独立应用

    [TOC] Spark:一个独立应用 关于构建 Java和Scala 在Java和Scala中,只需要给你的应用添加一个对于spark-core的Maven依赖. Python 在Python中,可以 ...

  6. css3基础知识——回顾

    1.属性选择器 完全匹配的属性选择器 [id=article]{} 示例: <style> input[type=text]{ border: 2px solid red;} </s ...

  7. vue.js 常用语法总结(一)

    作者:曾萍,目前就职于京东商城. 概述 2016年已经结束了.你是否会思考一下,自己在过去的一年里是否错过一些重要的东西?不用担心,我们正在回顾那些流行的趋势.通过比较过去12个月里Github所增加 ...

  8. Linux下connect超时处理【总结】

    1.前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口.当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的应用层, ...

  9. hibernate 为什么持久化类时必须提供一个不带参数的默认构造函数

    因为hibernate框架会调用这个默认构造方法来构造实例对象..即Class类的newInstance方法 这个方法就是通过调用默认构造方法来创建实例对象的 ,另外再提醒一点,如果你没有提供任何构造 ...

  10. eclipse设置统一编码

    1.Window-->Preferences-->General-->Workspace->Text file encoding->Other->UTF-8. 2. ...