DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

关于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   DoubleLi  阅读(2713)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-01-11 图解正向代理、反向代理、透明代理
2022-01-11 如何利用MobaX同时处理多台虚拟机输入相同命令
2022-01-11 linux ssh执行命令_在Linux上通过SSH在多个节点上并行执行命令的三种方法
2022-01-11 Window、Linux查看本机外网ip
2021-01-11 mysql 5.7 安装 (压缩包方式 .tar.gz)
2019-01-11 C/C++程序CPU问题分析
2012-01-11 List<T>.Contains(T item)判断是否包含的根据是什么
点击右上角即可分享
微信分享提示