在写python时,有时候写的一个python文件可能需要被其他python文件所用,那么可以用导入包 import 的 方式:

1.自己写的包放到哪里?

>>> import sys
>>> sys.path
['', '/usr/lib64/python34.zip', '/usr/lib64/python3.4', '/usr/lib64/python3.4/plat-linux', '/usr/lib64/python3.4/lib-dynload', '/usr/lib64/python3.4/site-packages', '/usr/lib/python3.4/site-packages']

 可以看到上面列举了一些文件夹地址,那么自己写的包理论上都可以放到上述地址中,但有一些如”/usr/lib64/python3.4“并不推荐,比较推荐的是:“” , “'/usr/lib/python3.4/site-packages'”, “'/usr/lib64/python3.4/site-packages'”

2.如何导入自己写的包?

比如“/usr/lib/python3.4/site-packages”,如果我写了 一个 exp.py 文件放在这个文件下,那么我在自己的系统写的 python3 文件都可以采用 import exp 导入。

还可以看到还有一个是“”,及当前文件夹,假如 存在如此的 一个 文件 结构:

parent/
one/
         __init__.py
exp.py
exp2.py
exp3.py

  exp.py和exp2.py都在one目录下,那么在exp2.py中可以通过 import exp 导入exp.py

  而exp3.py和one都处在parent目录下,那么在exp3.py中可以通过 import one.exp 导入exp.py

3.__init__.py的作用

  偶尔可以看到有些人写的包下面还会有一个__init__.py,它的作用是在导入包时首先执行的。

  假设在 exp3.py 中写入 import one.exp ,那么会首先执行 __init__.py 文件,接着会执行exp.py文件

  如果不需要,__init__.py可以为空,也可以干脆不加入__init__.py

4.if __name__ == "__main__"

  也有时候会看到 .if __name__ == "__main__" 语句,它的作用就是当此文件没有被作为导入的文件使用时执行 if 语句块里的程序。

  假如 exp.py 中加入了 if __name__ == "__main__" ,然后 python3 exp.py,就会执行这个语句块里的内容

  而 如果 if __name__ == "exp",时则是被 其他文件 以 "import exp"导入时执行的部分

  有如果是 if __name__ == "one.exp",时则是被 其他文件 以 "import one.exp"导入时执行的部分

  注意 在  "import exp"时是不会执行 if __name__ == "one.exp"中的内容的!同样: "import one.exp“是不会执行 if __name__ == "exp"中的内容的

python import 自己的包的更多相关文章

  1. python import eventlet包时提示ImportError: cannot import name eventlet

    root@zte-desktop:/home/ubuntu/python-threads# cat eventlet.py #!/usr/bin python import eventlet from ...

  2. [Python]import使用的疑难杂症与包管理

    概念:模块与包 模块module:一般是以.py为后缀的文件,也包括.pyo..pyc..pyd..so和.dll后缀的文件,模块内定义了函数.类以及变量 包package:包是含有若干个模块的文件夹 ...

  3. python import, from xx import yy

    区别: 用import modulexx/packagexx.moduleyy是导入某一模块,如果想引用模块的内容(class, method,variables...)必须用全名,即 [module ...

  4. python 深入模块和包

    模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...

  5. (Python )模块、包

    本节开始学习模块的相关知识,主要包括模块的编译,模块的搜索路径.包等知识 1.模块 如果我们直接在解释器中编写python,当我们关掉解释器后,再进去.我们之前编写的代码都丢失了.因此,我们需要将我们 ...

  6. Python Import 详解

    http://blog.csdn.net/appleheshuang/article/details/7602499 一 module通常模块为一个文件,直接使用import来导入就好了.可以作为mo ...

  7. python socket发送魔法包网络唤醒开机.py

    python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...

  8. Python下科学计算包numpy和SciPy的安装

    转载自:http://blog.sina.com.cn/s/blog_62dfdc740101aoo6.html Python下大多数工具包的安装都很简单,只需要执行 “python setup.py ...

  9. python编写网络抓包分析脚本

    python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...

随机推荐

  1. Storm并发度和Grouping方式

    Storm并发度和Grouping方式 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans ...

  2. js 中 setTimeout()的用法

    setTimeout()在js类中的使用方法   setTimeout (表达式,延时时间)setTimeout(表达式,交互时间)延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTi ...

  3. javascript 动态创建表格

    <html> <head> <script> function createTable(rows,lines){ this.rows=rows; this.line ...

  4. Windows2008RT搭建VPN服务器

    总结一下2008系统搭建VPN的步骤和过程,自己有个人网站和服务要通过互联网发布出来.服务器放在自己家里,宽带是民用的.也就产生了服务发布的一些问题.用无法映射出真实的公网IP,或是一些其他内部的问题 ...

  5. sql语句操作记录

    发觉一些sql语句写出来的时候不停忘记,做一个记录. mySQL .查看表的创建过程sql语句和注释,注释是在创建表的过程中增加comment,后面跟随注释的内容 SHOW CRATE TABLE T ...

  6. MVC自学第二课

    鉴赏一个软件开发框架最好的办法是投入其中并使用它.本课将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.为简化起见,本课涉及到的一些技术细节在这里可能会跳过,会在以后的课程中再详细说明. ...

  7. MYSQL 错误日志

    背景知识 : 就算我们不配置mysql的错误文件,它也会有一个默认的,在data文件夹下保存(.err文件) 还好这个文件保存在哪我们还是可以配置的 配置方法: log-err=E:\DB\mysql ...

  8. 详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus

    [大伽说]如何运维千台云服务器 »   CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.L ...

  9. (10)Xamarin.Android - 储存数据于Windows Azure

    原文 Xamarin.Android - 储存数据于Windows Azure 如何将Xamarin.Android 与Windows Azure做结合,将Android APP上的数据丢到云端去储存 ...

  10. 练习一下linux中的list函数。

    所有的list函数见 include/linux/list.h 自己从 include/linux/list.h 拷贝了一些函数到自己的list.c中, 然后练习了一下. 没有别的目的,就是想熟练一下 ...