python包的init文件(initpy文件)
创建一个python项目时,需要的touch XXXX/__init__.py是什么意思?
__init__.py是包模块文件,在gothonweb中创建__init__.py,可以在主文件通过import导入在gothonweb的文件下的.py文件中的变量、类、方法。
如:import gothonweb/test/test_print
求助一下,python如何调用另一个py文件
1 先配置环境变量,比如你的内置函数放在c盘下x.py,那么
import?sys
sys.path.append('c:\\')
2 到你要引用的地方
import?x
就可以了,注意如果有冲突最好用包(Package)
每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字。调用包就是执行包下的__init__.py文件。
跨包调用(当前目录下有modulepack1包):
1 from modulepack1[.modulepack2] import module
如果当前目录下能够找到要调用的包,可以直接from包import模块,如果当前目录找不到要调用的包,需要向sys.path添加包的所在绝对路径。
import一个包名,就等于执行了这个包下的__init__文件。
怎么样理解一个python项目的各种文件
在Python?中引用是非常简单的事情,这里需要清楚三个概念就可以了包、模块、类。类这个就不用说了。
模块对应的是一个.py?文件,那么module_name?就是这个文件去掉.py?之后的文件名,py?文件中可以直接定义一些变量、函数、类。
那么包我们可以看作一个包含__init__.py?和一系列.py?文件的文件夹,这样做的目的是为了区别包和普通字符串。
import?module_name
from?package_name?import?module_name
from?package_name?import *
那么如何import?时,python?解释器如何才能找到该模块放置的文件位置呢?python?寻找模块的优先级如下:
1、???当前文件目录
2、???环境变量PYTHONPATH
3、???sys.path(list?类型)
sys.path?是list?类型,我们可以通过insert(), append()?方法来增加模块导入的搜索路径,如:
import sys
path = “……” #?需要增加的路径
sys.path.insert(0, path)
在import模块时,该模块的顶层代码将会被执行一次。如果该模块被import多次,例如import A, import B.其中B模块本身也有import A,那么只在第一次被import的时候顶层代码会被执行。
模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。这非常重要,有些人以为这些语句会多次导入多次执行,其实不然。
模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。我们知道python是解释性的脚本语言,而.pyc是经过编译后的字节码,这一工作会自动完成,而无需程序员手动执行。
什么时候你应该使用?from?module?import?
如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用?from?module?import。
如果你想要有选择地导入某些属性和方法,而不想要其它的,使用?from?module?import。
如果模块包含的属性和方法与你的某个模块同名,你必须使用?import?module?来避免名字冲突。
除了这些情况,剩下的只是风格问题了,你会看到用两种方式编写的?Python?代码。
尽量少用?from module import *?,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难。 ?
其它要点:
包
在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。
那么我们平常新建文件的时候,都是建一个.py文件(类似java,但是python不用建立类,是以模块为载体)至于怎样组织包就要功能需要了
在C/C++/Java中,main是程序执行的起点,Python中,也有类似的运行机制,但方式却截然不同:Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。
每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。这个特性,为测试驱动开发提供了极好的支持,我们可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。
典型的Python文件结构:
python import模块方法
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。
下面将具体介绍几种常用情况:
(1)主程序与模块程序在同一目录下:
如下面程序结构:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用import?mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
|?? `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
|?? `-- mod2.py
|-- sub
|?? `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py
而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。
import sys
sys.path.append("..")
import mod1
import mod2.mod2
(4)从(3)可以看出,导入模块关键是能够根据
python中包是什么
python包
包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。
python库是参考其它编程语言的说法,就是指python中的完成一定功能的代码集合,供用户使用的代码组合。在python中是包和模块的
形式。
推荐学习《python教程》
一般按照API的惯例来设计库。
应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的
约定。由於近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编
程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组
成单元间的耦合程度,从而提高系统的维护性和扩展性。