导入模块的语句的三种方法:
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. mac命令行对复杂ipa包重新签名

    最近在做ios的自动化平台,需要通过命令行安装卸载ipa包 好了问题来,别人上传的ipa包,很可能是开发签名了只能在特定手机上安装的测试ipa包,那我们如何将其安装在我们的自动化的iphone上呢? ...

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

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

  3. 用《VisualStudio命令提示》生成WSDL客户端文件

    1.找到vs命令提示符并且以管理员方式打开. 2.输入:wsdl + wsdl文件路径(可以为url).如:“wsdl http://localhost:30373/PDAWebService/SH3 ...

  4. loadrunner controller:集合点策略

    集合点只有在多用户并发运行的时候才能体现它的作用. Scenario ---> Rendezvous 打开集合点设置界面,如下图所示: 我们可以看到Vusers 列表框里有两个用户,这与我们设置 ...

  5. loadrunner:关联操作

    文章以实例讲解loadrunner中的关联操作,内容包括:自动关联.手动关联和关联规则的设置. 1.1.1     准备工作 在web tours项目默认设置里,登录操作是没有生成sessionID的 ...

  6. 001.net开发环境与变量

    1 .net 技术平台,用来创建互联互通的应用程序 2 应用 嵌入式开发企业级应用 3 .NET Framework 技术:公共语言运行时 .NET Framework的工作模式:.NetC#> ...

  7. MySQL插入数据中文乱码问题的解决

    一.使用语句 show variables like 'character%'; 来查看当前数据库的相关编码集. 1.启动cmd,登录mysql ①cd C:\Program Files\MySQL\ ...

  8. spring MVC cors跨域实现源码解析

    # spring MVC cors跨域实现源码解析 > 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就 ...

  9. 一个RESTful+MySQL程序

    前言 本章内容适合初学者(本人也是初学者). 上一章内容(http://www.cnblogs.com/vanezkw/p/6414392.html)是在浏览器中显示Hello World,今天我们要 ...

  10. Java排序小算法(冒泡和选择)

    package MyTest; import java.util.Scanner; public class BubbleSort { public void Init(int array[]) { ...