python import 自己的包
在写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 自己的包的更多相关文章
- python import eventlet包时提示ImportError: cannot import name eventlet
root@zte-desktop:/home/ubuntu/python-threads# cat eventlet.py #!/usr/bin python import eventlet from ...
- [Python]import使用的疑难杂症与包管理
概念:模块与包 模块module:一般是以.py为后缀的文件,也包括.pyo..pyc..pyd..so和.dll后缀的文件,模块内定义了函数.类以及变量 包package:包是含有若干个模块的文件夹 ...
- python import, from xx import yy
区别: 用import modulexx/packagexx.moduleyy是导入某一模块,如果想引用模块的内容(class, method,variables...)必须用全名,即 [module ...
- python 深入模块和包
模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...
- (Python )模块、包
本节开始学习模块的相关知识,主要包括模块的编译,模块的搜索路径.包等知识 1.模块 如果我们直接在解释器中编写python,当我们关掉解释器后,再进去.我们之前编写的代码都丢失了.因此,我们需要将我们 ...
- Python Import 详解
http://blog.csdn.net/appleheshuang/article/details/7602499 一 module通常模块为一个文件,直接使用import来导入就好了.可以作为mo ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
- Python下科学计算包numpy和SciPy的安装
转载自:http://blog.sina.com.cn/s/blog_62dfdc740101aoo6.html Python下大多数工具包的安装都很简单,只需要执行 “python setup.py ...
- python编写网络抓包分析脚本
python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...
随机推荐
- Linux计划任务(转载)
Linux计划任务(转载) Linux的计划任务是系统管理方面的一个重要内容,是系统自动完成工作的一种实现方式,正因为有了计划任务,我们才可以完全实现系统管理的脚本化和自动化. 关于计划任务,Linu ...
- gcc 编译器
gcc -E test.c 预处理 gcc -v test.c 查看编译的整个过程 objdump -d a.out 查看elf文件
- VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求
开发过程中,免不了需要前台与后台的交互,大部分的交互都是通过Ajax请求来完成,在服务端未完成开发时,前端需要有一个可以模拟Ajax请求的服务器. 在NodeJs环境下,通过配置express可访问的 ...
- 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数
刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...
- Windows2008RT搭建VPN服务器
总结一下2008系统搭建VPN的步骤和过程,自己有个人网站和服务要通过互联网发布出来.服务器放在自己家里,宽带是民用的.也就产生了服务发布的一些问题.用无法映射出真实的公网IP,或是一些其他内部的问题 ...
- C++设计模式之建造模式
#include <iostream>using namespace std; class ApplePhone { public: virtual void buildCamera()= ...
- VMware ESXI4.1 常用命令
一. VMware ESX Command 1. # vmware –v (查看esx版本) 2. # esxcfg-info -a(查看显示ESX硬件,内核,存储,网络等信息) # esxcfg- ...
- error C3861: “gets”: 找不到标识符
error C3861: “gets”: 找不到标识符 解决办法: 把“gets”改成“gets_s”
- Labeling Balls(拓扑排序wa)
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12466 Accepted: 3576 D ...
- elmah - Error Logging Modules and Handlers for ASP.NET - 1 : 初体验
elmah(英文):https://code.google.com/p/elmah/ 写作思路:先看结果,然后再说原理 elmah文章基本内容如下 1.安装 2.基本使用 3.详细配置讲解 ...