在写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. Android minHeight/Width,maxHeight/Width

    在layout文件中,设置IamgeView的最大(最小)高度(宽度)时,需要同时设置android:adjustViewBounds="true",这样设置才会生效.在代码中设置 ...

  2. Docker基本概念填坑

    Docker的基本概念填坑 Docker的基本概念填坑 1. Docker的基本组成 Docker Client客户端 Docker Daemon守护进程 Docker Image镜像 Docker ...

  3. 初识JavaScript,感觉整个人都不好了。。。

    学习web前端的开发已经将近一个月了,开发中的三个大兄弟——“html”.“css”.“JavaScript”,小哥我已经深入接触了前两位,并与他俩建立的深厚的友谊.在编写过程中,不能说达到各位大神的 ...

  4. java面向对象之 封装 Encapsulation

    什么是封装:对象中的成员该隐藏的隐藏.该公开的要公开 封装:顾名思义,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有 ...

  5. SQL Server 修改表

    alter table 可能用三种方式来完成. 第一种: 只修改元数据. 1.删除一个列. 2.一个行被增加而且空值被认为是所有行的新值. 3.当可变长度的列的长度增加时. 4.不允许为空的列被允许为 ...

  6. C语言入门(3)——对Hello World程序的解释

    上篇我们写了一个最简单的程序.这个简单的程序包含了很多重要的内容.本篇我们通过这个最简单的Hello World程序逐一讲解C语言程序的一些特点. 打开Visual Studio 2013 通过菜单- ...

  7. 如何在IE8下调试OCX控件

    第一种方式 多进程模式下, 在IE8打开web页面, 然后在调试菜单选择附加到进程, 这时看到2个IE进程, 选择没有带标题的, 也就是主进程, 就可以正常调试了. 此方式比较麻烦, 不能F5直接启动 ...

  8. HDOJ 1495 非常可乐 【BFS】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. printf("%d, %d\n", i++, ++i)的输出结果是确定的吗???

    1. 问题描述 以下代码的输出结果是什么? 题目1: ; printf("%d, %d\n", i++, ++i); 题目2: ; printf("%d, %d, %d, ...

  10. C#反射调用程序集类中方法

    建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x ...