python 引用本地文件 python引用另一个文件的类

您所在的位置:网站首页 python调用本地文件 python 引用本地文件 python引用另一个文件的类

python 引用本地文件 python引用另一个文件的类

#python 引用本地文件 python引用另一个文件的类| 来源: 网络整理| 查看: 265

http://techtrace.org/?p=1347

同一文件夹情况下 import a Python 会自动从 sys.path 路径列表里的所有路径里寻找你要 import 的模块,这个路径列表可以通过在终端里输入以下命令查看: import sys sys.path 如果要调用其他路径的文件,可以先在上述列表中加入新的路径,以你提到的情况为例: import sys sys.path.insert(0, '/') import test 一般一个项目的所有文件应该在同一个项目文件夹中吧,此时有其他解决办法比如在项目的下级目录里放置 __init__.py 文件,然后用 from 文件夹 import 文件名 的方式来引入模块。============================如果你的调用文件离被调用的test.py远到八竿子打不着, 可以在sys.path中append "C:/"路径 (使得import过程中的PYATHONPATH能找到test.py这个文件), 再import test. 或者还有一个方法, 用imp模块的load_source或者find_module+load_module方法动态加载模块, 具体看这http://docs.python.org/library/imp.html ================================= a.funcA() 不同文件夹的话要 import sys sys.path.insert('a.py所在的路径') import a a.funcA() 大概是这样

==============================

win下面cmd当前目录上运行python交互的时候, 当前目录如果是个python包,要在当前交互引入它, 也需要 sys.path.append(".."), 不过我个人的做法通常是sys.path.insert(0,"..") [code] c:/py25>cd sub c:/py25>python >>>#import sub #这里提示找不到 >>>import sys >>>sys.path.insert(0,'..') #或者sys.path.append("..") >>>import sub #这里引入成功 [/code] 貌似是大蛇的当前目录是"能识儿子是儿子不识自己是父亲"的, 也就是要引入当前包的父包的话,要sys.path.insert(0,'../..')了...=====================================在Python 中引用是非常简单的事情,这里需要清楚三个概念就可以了包、模块、类。类这个就不用说了。模块对应的是一个.py 文件,那么module_name 就是这个文件去掉.py 之后的文件名,py 文件中可以直接定义一些变量、函数、类。那么包我们可以看作一个包含__init__.py 和一系列.py 文件的文件夹,这样做的目的是为了区别包和普通字符串。import module_namefrom package_name import module_namefrom package_name import *那么如何import 时,python 解释器如何才能找到该模块放置的文件位置呢?python 寻找模块的优先级如下:1、 当前文件目录2、 环境变量PYTHONPATH3、 sys.path(list 类型)sys.path 是list 类型,我们可以通过insert(), append() 方法来增加模块导入的搜索路径,如:import syspath = “……” # 需要增加的路径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 引用本地文件 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)可以看出,导入模块关键是能够根据sys.path环境变量的值,找到具体模块的路径。这里仅介绍上面三种简单情况。

========================================================================================

文件1:myclass.py

class test1 ( ): def __init__ ( self , networkDataset = 'E:\\GPS\\beijingroad' , workspace = 'Road_ND.nd' , outFolder = "out" , points_table = "vertex" ): print "initialize..." def Foo ( self ): return "a"

文件2:test2.py

def test ( ): import os from myclass import test1 c =test1 ( ) return c. Foo ( ) print test ( )



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3