DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

关于Python的import你要知道的种种

常见用法

  1. 引入模块import <模块名>,例如import os

  2. 引入模块并起别名import <模块名> as <模块别名>,例如import numpy as np

  3. 引入部分函数、变量或类from <模块> import <要引入的>,例如from sys import path

解决项目中不同路径关系下py文件相互引用的问题

测试工程目录结构:

$ tree
.
├── module_1
│   ├── test_import_2.py
│   └── test.py
├── module_2
│   ├── test_import_3.py
│   └── test.py
├── test_import_0.py
└── test_import_1.py

2 directories, 6 files

总结起来两句话:

  • 若要引用子目录上的py文件(例如test_import_1.py要引用module_1文件夹下的test_import_2.py),需要将被引文件所在目录升级为为模块,即在被引文件的目录下创建__init__.py
# 此时的module1目录下的目录树为:
├── module_1
│   ├── __init__.py
│   ├── test_import_2.py
│   └── test.py
  • 若要引用父目录上的py文件(例如test_import_2.py要引用父目录文件夹下的test_import_1.py),需要将该父目录添加到当前文件的sys.path
# 此时的test_import_2.py文件中有:
import sys
sys.path.append("..") #相对路径或绝对路径

举个栗子,module_2文件夹下的test_import_3.py要引用module_1文件夹下的test_import_2.py

  1. 分析 test_import_3.py要引用其父目录下另一子目录中的文件(读起来绕但是好理解)
  2. 将父目录添加到test_import_3.pysys.path
# in test_import_3.py
import sys
sys.path.append("..")
  1. 将子目录提升为模块,即在module_1文件夹下新建__init__.py
# module目录下的目录树
├── module_1
│   ├── __init__.py
│   ├── test_import_2.py
│   └── test.py

注意:引用进来的变量名为module_1.test_import_2

不同引用方式下引用函数或变量是否为相同? ——> 相同

测试样例:test_import_0.py引用test_import_1.py文件中的函数及变量

  • test_import_0.py文件
import test_import_1
from test_import_1 import test_function
from test_import_1 import test_var

if __name__ == '__main__':
    if test_function == test_import_1.test_function:
        print("same function")
    else:
        print("different function")
    if test_var == test_import_1.test_var:
        print("same var")
    else:
        print("different var")
  • test_import_1.py文件
def test_function():
    return "123"

test_var = "123"
 
posted on 2023-01-11 15:21  DoubleLi  阅读(3021)  评论(0)    收藏  举报