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模块(跨目录)调用总结 – mushroom的博客 – CSDN博客

    原文作者:诞生于1874
    原文地址: https://zhuanlan.zhihu.com/p/45751680
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞