您的位置:首页 > 脚本大全 > > 正文

在python中导入模块有哪几种方式(Python不同目录间进行模块调用的实现方法)

更多 时间:2022-04-02 14:37:07 类别:脚本大全 浏览量:2184

在python中导入模块有哪几种方式

Python不同目录间进行模块调用的实现方法

一、背景

之前写了软件开发目录规范这篇博客,相信很多人都已经知道,我们在写程序时需要遵循一定的规范,不然,就算很简答的逻辑程序的代码,读起来会很费劲,占用了我们大量的时间,但是,我们一旦用了这样的规范目录,我们怎么去愉快的进行模块之前的相互导入呢?这就不得不说我们今天讨论的两个概念:绝对路径和相对路径。

二、函数功能解释

1、__file__

功能:返回自身文件的相对路径

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • #atm.py中的代码
  • print(__file__)
  •  
  • #pycharm的执行结果
  • d:\python\python35\python.exe d:/pycharmprojects/51homework/atm/bin/atm.py
  • d:/pycharmprojects/51homework/atm/bin/atm.py #打印出绝对路径
  • #从cmd执行atm.py
  • d:\pycharmprojects\51homework>python atm/bin/atm.py
  • atm/bin/atm.py  #打印的是相对路径
  • 从上面看,为什么pycharm中执行的结果是绝对路径,而从cmd调用python命令时显示的却是相对路径?你从pycharm的执行结果可以看出,在pycharm执行atm.py文件时,是从绝对路径下去执行的,而你从cmd下去执行的时候,是你选择可以在哪个路径下执行,而__file__表示的是相对路径,所以在哪个路径下,就打印哪个路径。

    2、os.path.abspath()

    功能:返回自身文件的绝对路径

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • #atm.py的文件代码
  • import os
  • print(os.path.abspath(__file__))
  • #在cmd中的执行结果
  • d:\pycharmprojects\51homework>python atm/bin/atm.py
  • d:\pycharmprojects\51homework\atm\bin\atm.py #获取atm.py的绝对路径
  • 3、os.path.dirname()

    功能:返回目录名,不需要文件名

  • ?
  • 1
  • 2
  • print(os.path.dirname( os.path.abspath(__file__) ))
  • d:\pycharmprojects\51homework\atm\bin #只返回目录名,不需要文件名
  • 4、sys.path

    功能:python环境的执行的环境变量

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • import sys
  • print(sys.path)
  • #cmd执行的结果
  • ['d:\\pycharmprojects\\51homework\\atm\\bin', 'd:\\python\\python35\\python35.zip',
  •  'd:\\python\\python35\\dlls', 'd:\\python\\python35\\lib', 'd:\\python\\python35',
  • 'd:\\python\\python35\\lib\\site-packages']
  • 注:执行路径是列表的形式打印出来的,所以sys.path数据类型是一个列表。

    三、绝对路径和相对路径

    1、绝对路径

    绝对路径:从根目录为起点到你所在的目录。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • >>> import os
  • >>> os.chdir("d:\\pycharmprojects\\51homework\\atm\\bin\\")
  • >>> os.listdir()
  • ['atm.py', '__init__.py']
  • >>> os.path.abspath('atm.py')
  • 'd:\\pycharmprojects\\51homework\\atm\\bin\\atm.py'  #是从d盘的这个根目录下来的
  • 2、相对路径

    相对路径:从一个目录为起点到你所在的目录。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • >>> import os
  •  
  • >>> os.chdir("d:\\pycharmprojects\\51homework\\atm\\bin\\")
  •  
  • >>> os.listdir()
  •  
  • ['atm.py', '__init__.py']
  •  
  • >>> os.path.dirname('atm.py')
  •  
  • ''  #显示相对路径
  • 四、不同目录间进行模块调用

    1、添加环境变量

    一般情况下,绝对路径函数和相对路径函数是结合起来用的,特别是在不同目录之间相互调用彼此的模块。

    在python中导入模块有哪几种方式(Python不同目录间进行模块调用的实现方法)

    比如按以上层级:atm.py如果想调用其他模块中的代码,必须要跟atm.py是同级的,不信请看如下代码:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • #atm.py中的代码
  •  
  • import sys
  •  
  • print(sys.path)
  •  
  • #cmd执行的结果
  •  
  • d:\pycharmprojects\51homework>python atm/bin/atm.py
  •  
  • ['d:\\pycharmprojects\\51homework\\atm\\bin', 'd:\\python\\python35\\python35.zip',
  •  
  •  'd:\\python\\python35\\dlls', 'd:\\python\\python35\\lib', 'd:\\python\\python35',
  •  
  • 'd:\\python\\python35\\lib\\site-packages']
  • 只到'd:\\pycharmprojects\\51homework\\atm\\bin'这一层,其他的层级无法调用。那怎么办呐?

    步骤如下:

    1.获取atm的绝对路径
    2.添加到环境变量中

    代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • #atm.py中的代码
  • import os,sys
  • base_dir = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) #atm的绝对路径
  • print(base_dir)
  • sys.path.append(base_dir) #添加到环境变量中
  • #cmd执行结果
  • d:\pycharmprojects\51homework>python atm/bin/atm.py  #执行atm.py文件
  • d:\pycharmprojects\51homework\atm  #打印atm的绝对路径
  • ['d:\\pycharmprojects\\51homework\\atm\\bin', 'd:\\python\\python35\\python35.zip',
  • 'd:\\python\\python35\\dlls', 'd:\\python\\python35\\lib', 'd:\\python\\python35',
  •  'd:\\python\\python35\\lib\\site-packages',
  •  'd:\\pycharmprojects\\51homework\\atm'#atm的绝对路径已经添加到环境变量中
  • 2、调用其他模块

    接下来就可以顺利的进行不同目录下,模块之间的调用了

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • #atm.py中的代码
  • import os,sys
  • base_dir = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )
  • sys.path.append(base_dir)
  • from core import main  #调用core中的main模块
  • main.sayhi()  #调用main模块中sayhi函数
  •  
  • #main.py中代码
  • def sayhi():
  •   print("hello word")
  •  
  • #cmd执行的结果
  • d:\pycharmprojects\51homework>python atm/bin/atm.py
  • hello word
  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://www.cnblogs.com/wushuaishuai/articles/9221010.html

    您可能感兴趣