python不同目录间模块调用

前置:

sys.path是python的搜索模块的路径集。

以下是目录结构:

1、首先同一目录下的模块间调用:b目录下Math_3.py调用Math_4.py

 1 import sys
 2 print(‘the path of Math_3 is {}‘.format(sys.path))
 3 from Math_4 import Math_4
 4 class Math_3:
 5
 6     def __init__(self, a, b):
 7         self.a = a
 8         self.b = b
 9
10     def mul(self):
11         return self.a * self.b
12
13     m4 = Math_4(6, 2)
14     print(‘the value of m4 is {}‘.format(m4.div()))
15
16 if __name__ == ‘__main__‘:
17     m3 = Math_3(3, 2)
18     print(‘the value of m3 is {}‘.format(m3.mul()))
19
20 #运行结果
21 the path of Math_3 is [‘D:\\PyEx\\math\\b‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘]
22 the value of m4 is 3.0
23 the value of m3 is 6

2、基于第1步同级别目录下的模块调用:b目录下Math_3.py调用a目录下的Math_2.py

 1 import sys
 2 #表示导入当前文件的上层目录到搜索路径中
 3 sys.path.append(‘..‘)
 4 print(‘the path of Math_3 is {}‘.format(sys.path))
 5 from a.Math_2 import Math_2
 6 from Math_4 import Math_4
 7 class Math_3:
 8
 9     def __init__(self, a, b):
10         self.a = a
11         self.b = b
12
13     def mul(self):
14         return self.a * self.b
15
16     m2 = Math_2(3, 1)
17     print(‘the value of m2 is {}‘.format(m2.sub()))
18
19     m4 = Math_4(6, 2)
20     print(‘the value of m4 is {}‘.format(m4.div()))
21
22 if __name__ == ‘__main__‘:
23     m3 = Math_3(3, 2)
24     print(‘the value of m3 is {}‘.format(m3.mul()))
25
26 #运行结果
27 the path of Math_3 is [‘D:\\PyEx\\math\\b‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘, ‘..‘]
28 the value of m2 is 2
29 the value of m4 is 3.0
30 the value of m3 is 6

3、基于第2步,最外层目录math下的test_math.py调用b目录下的Math_3.py

 1 import sys
 2 print(‘the path of test_math is {}‘.format(sys.path))
 3 from b.Math_3 import Math_3
 4 m1 = Math_1(1, 2)
 5 m3 = Math_3(4, 5)
 6 print(‘the value of m3 is {}‘.format(m3.mul()))
 7
 8 #运行结果:
 9 the path of test_math is [‘D:\\PyEx\\math‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘]
10 the path of Math_3 is [‘D:\\PyEx\\math‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘, ‘..‘]
11 Traceback (most recent call last):
12   File "test_math.py", line 4, in <module>
13     from b.Math_3 import Math_3
14   File "D:\PyEx\math\b\Math_3.py", line 5, in <module>
15     from Math_4 import Math_4
16 ModuleNotFoundError: No module named ‘Math_4‘

运行结果报错,根据14、15行信息,原因是在Math_3.py中导入的同一目录下的Math_4.py出错了,通过分析运行结果中打印出来的sys.path,是由于程序搜索模块的路径集中不包含D:\\PyEx\\math\\b,所以修改Math_3.py的代码如下:

 1 import sys
 2 sys.path.append(‘..‘)
 3 print(‘the path of Math_3 is {}‘.format(sys.path))
 4 from a.Math_2 import Math_2
 5 #修改后
 6 from b.Math_4 import Math_4
 7 class Math_3:
 8
 9     def __init__(self, a, b):
10         self.a = a
11         self.b = b
12
13     def mul(self):
14         return self.a * self.b
15
16     m2 = Math_2(3, 1)
17     print(‘the value of m2 is {}‘.format(m2.sub()))
18
19     m4 = Math_4(6, 2)
20     print(‘the value of m4 is {}‘.format(m4.div()))
21
22 if __name__ == ‘__main__‘:
23     m3 = Math_3(3, 2)
24     print(‘the value of m3 is {}‘.format(m3.mul()))

4、基于以上修改再次运行test_math.py文件,其结果如下

the path of test_math is [‘D:\\PyEx\\math‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘]
the path of Math_3 is [‘D:\\PyEx\\math‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘, ‘..‘]
the value of m2 is 2
the value of m4 is 3.0
the value of m1 is 3
the value of m3 is 20

原文地址:https://www.cnblogs.com/panlj/p/11640698.html

时间: 2024-10-28 23:03:32

python不同目录间模块调用的相关文章

python 不同目录间的模块调用

有时候调用的模块不再同一个目录.直接import 是加载不进来的.默认的加载路径是sys.path中指定的路径.如果要指定加载的目录得需要把这个目录加到sys.path里面. 比如要加载父目录的同级目录下的模块. 当前文件atm.py 要加载的模块settings.py 1.先找到当前文件的绝对路径 import os print(os.path.abspath(__file__))#abspath 返回文件的绝对路径.__file__文件的相当路径 2.找到父级目录 import os pri

Python之路-目录规范和不同目录间进行模块调用

目录规范: 预备知识: 要实现不同目录间进行模块调用必须在当前文件夹中创建一个空的__init__.py的文件(pycharm会在创建python package的时候自动创建),有__init__.py的叫包,没有这个文件叫目录 __file__常量获取当前文件的相等路径 os.path.abspath(filepath)>>>将相等路径转换成绝对路径 os.path.dirname(filepath)>>>获取路径名(最上层文件或目录的父文件夹路径) sys.pat

Python 之 不同目录间进行模块调用

不同目录间进行模块调用 main.py 调用 login.py 1.编写main.py主程序文件 #Author Kang import os import sys # print(sys.path) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #程序主目录 # print(BASE_DIR) #/Users/kang/PycharmProjects/不破不立/第二章/20190129/ATM sy

Python学习:9.模块的安装以及调用模块

什么是模块 在Python中,模块其实也就是包含python代码的文件,我们为什么要使用模块?在我们以后写代码的时候,我们会发现有很多功能需要经常使用,那我们想要使用这些功能怎么办,要再把那些代码在敲一遍吗,这样不但增加了代码量,还浪费了时间,有人说我们可以写在函数里,是的,我们可以把一些功能写在函数里,使用的时候调用函数就行了,但是我们每次新建一个文件的时候,都需要再次将那些功能函数写一遍,还是有些麻烦,这时候,模块的便捷就体现出来了,我们将大量功能函数写在一个py文件里,当我们需要用到部分功

python在不同层级目录import模块的方法

使用python进行程序编写时,经常会使用第三方模块包.这种包我们可以通过python setup install 进行安装后,通过import XXX或from XXX import yyy 进行导入.不过如果是自己遍写的依赖包,又不想安装到python的相应目录,可以放到本目录里进行import进行调用:为了更清晰的理清程序之间的关系,例如我们会把这种包放到lib目录再调用.本篇就针对常见的模块调用方法汇总下. 一.同级目录下的调有 程序结构如下: -- src    |-- mod1.py

python 如何引用上级目录的模块

今天,做一个测试,想在当前python中引用上层目录的模块:呃,一番搜索. 先看一下目录情况: [[email protected] test]# tree . ├── t1.py ├── t2 │   └── t2.py └── xxu     └── test.py 2 directories, 3 files 其实,最开始仅仅是想,test.py中可以调用t1.py中函数: 直接使用的效果: [[email protected] xxu]# cat test.py  #/usr/bin/e

Python模块调用

目录 1 模块 import from- import - 1.1 使用模块 1.2 Python模块的导入 1.3 模块的名称空间 1.4 导入模块的做的事情 2 from import 2.1 2.2 from spam import * 3 把模块当做脚本执行 3.1 脚本执行 3.2 模块执行 4 模块搜索路径 5 编译Python文件 6 包 6.1 6.2 小结 6.3 init.py文件 7 绝对导入和相对导入 7.1 绝对导入是从包的最开始的位置开始 7.2 相对导入 8 通过包

python导入不同目录下模块的方法

下面将具体介绍几种常用情况:(1)主程序与模块程序在同一目录下:如下面程序结构:`-- src    |-- mod1.py    `-- test1.py    若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *; (2)主程序所在目录是模块所在目录的父(或祖辈)目录如下面程序结构:`-- src    |-- mod1.py    |-- mod2    |   `-- mod2.py    `-- test1.py    若

python3 不同目录下的模块调用

我们新手在写python的时候往往会调用其他目录下的模块来干活(老鸟都知道的),有时会不知道怎么办, 如我们在目录B下的脚本d.py需要调用目录A下的脚本c.py这时该怎么做呢 ? 我们需要用到模块os和sys来把A目录加到环境变量中去就行了: 在脚本d.py import sys,os BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_PATH) from mod