python模块调用方式_python随记之模块调用

模块调用主要分为:系统模块调用,自定义模块调用。

系统模块调用:

系统模块调用一般使用from...import.../import...的语法可以引用一些系统模块。

import sys

import pygame

自定义模块调用:

1.同一目录下

在进行编码设计的时候,往往需要自定义一些模块,其他程序可以调用这些模块,那么方法和原理还是和上面的系统模块调用是差不多的,让我们来举个例子:

先创建一个目录ModPython,下面定义一个公共模块PublicA.py ,为了更好的理解,我都是写的简单的方法的栗子。

#PublicA.py

def PubA():

print "I'm PublicA in /ModPythonh/PublicA.py"

接下来,还是在这个目录下新建一个python程序A.py去调用这个自定义的模块

#A.py

import PublicA

PublicA.PubA()

运行A.py的结果如下:

I am def PubA_1 in /ModPythonh/PublicA.py

2.不同目录下

建立目录,然后继续按下面的规则来点更复杂的,建好了我们再依次来说说不同情况的跨目录模块调用……ModPython/

-------------/A.py

-------------/PublicA.py

-------------/B /b1.py

-------------/B /b2.py

-------------/C /c.py

2.1同级目录下子文件调用:

在我们文件结构中,与A.py同级的有PublicA.py还有就是B、C目录了,那么对于A.py来说,b1、b2、c就是子文件了。

如果我们想要在A.py里面调用b1,需要怎么做呢?

如果直接进行import b1,上面试过了会报错,找不到模块b1,因为b1和A不再一个目录下。

那么我们就找到b1的父级目录B,B和和A.py在一个目录下,将B作为一个模块,b1、b2都作为模块里面的方法去调用,为了让系统知道B是一个模块,我们需要在B下面新建一个叫做__init__.py的文件,内容可以为空,这个文件可以告诉python B是一个可以调用的模块了。

-------------/B /__init__.py

from B import b1,b2

b1.b1_1()

b2.b2_2()

前提是_init_.py必须为空。

2.2同级目录下子文件调用:

创建目录

ModPython

---------/A.py

---------/PublicA.py

---------/B /__init__.py

---------/B /b1.py

---------/B /b2.py

---------/C /c.py

我们再来看这个目录结构,梳理一下,对于B、C来说他们是同级的,b1和c也是同级的,如果我们需要在c里面调用b该怎么做呢?如果像之前A.py调用的那样,还是会出现这个眼熟的error:ImportError: No module named B,导入的是B模块,而B和c.py文件也不是在一个目录下的了,如果需要那样调用,那么就要先回到上级目录C,再开始from B import b1

跳转目录这个操作,我们需要调用python的sys模块进行实现,具体实现方法如下:

#c.py

import sys

sys.path.append('..')

from B import b1

b1.b1_1()

用append()方法进行追加,..表示回到上一级目录中去。

再来看我们这个栗子,c.py回到上一级就是C这个目录了,对于C来说,和B就是同级目录,B下面已经创建了__init__.py文件,已经是个模块可以用来引入,这个时候from B import b1就没有问题可以顺利调用啦。

了解到这里,关于python跨目录调用自定义模块的问题基本就得以解决了,实在不行,还有一个万能的方法(偷笑(/▽\)):

只要在被调用文件所属的文件夹下创建好__init__.py文件,然后引入sys模块,在用append进行追加的时候直接写上需要调用文件的绝对路径。

3.调用自建模块通用方法

如果我们要调用B里面的文件,只需要找到B的绝对路径,假设是C:\Users\ModPython\B,那append就这么写:

sys.path.append('C:\\Users\\ModPython')

你可能感兴趣的:(python模块调用方式)