python中导入同级其他目录中的函数

使用模块运行的方式

假设有如下代码结构:

project/
│
├── test1/
│   |
│   └── demo.py
│
└── test2/
    |
    └── main.py

想要在main.py文件中引用demo.py 中的函数,可以如下操作,首先在test1和test2文件夹下新建__init__.py文件,内容为空即可。

结构如下:

project/
│
├── test1/
│   ├── __init__.py
│   └── demo.py
│
└── test2/
    ├── __init__.py
    └── main.py

demo.py代码

def add(a, b):
    return a + b

def minus(a, b):
    return a - b

main.py代码

from test1 import demo
# from test1.demo import add, minus 


if __name__ == '__main__':

    print(demo.add(1, 2))
    print(demo.minus(1, 2))

运行命令:python -m test2.main,注意这里不能直接通过IDE运行按钮进行运行,需要使用命令行,并且添加-m参数,使用模块方式运行。

如果在其他文件中使用

目录结构如下:

project/
│
├── test1/
│   ├── __init__.py
│   └── demo.py
│
├── test2/
│   ├── __init__.py
│   └── main.py
│
└── bar.py

如果要在bar.py中使用demo.py文件中的函数,并且不使用包的运行方式,可以在test1/__init__.py文件中添加如下代码:

from .demo import *

bar.py中的代码如下

import test1

if __name__ == '__main__':
    print(test1.add(1, 2))
    print(test1.minus(1, 2))

或者如下:

from test1 import add, minus

if __name__ == '__main__':
    print(add(1, 2))
    print(minus(1, 2))

 不使用模块的方式运行

目录结构:

project/
│
├── test1/
│   |
│   └── demo.py
│
└── test2/
    |
    └── main.py

 如果要在main.py中使用demo.py文件中的函数,并且不使用模块运行的方式,操作如下:

可以通过修改 sys.path 来实现。sys.path 是一个列表,Python 解释器会在这个列表的目录中查找你想要导入的模块。

在 main.py 中,需要添加一个路径到 sys.path 以确保 Python 能够找到 demo.py。这个路径应该是 demo.py 所在目录的绝对路径。

main.py代码如下:

import sys
import os

# 添加 test1 目录到 sys.path
project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 获取 project 目录
test1_dir = os.path.join(project_dir, 'test1')  # 获取 test1 目录的路径
sys.path.append(test1_dir)

# 现在可以导入 demo 模块
from demo import add, minus


if __name__ == '__main__':
    print(add(1, 2))
    print(minus(1, 2))

 项目根目录下引用其他子文件夹中的函数

目录结构如下:

project/
│
├── test1/
│   |
│   └── demo.py
│
├── test2/
│   |
│   └── main.py
└── bar.py

在bar.py中使用demo.py文件中的函数。

bar.py代码如下:添加test1目录到sys.path中

import os
import sys

# 添加 folder1 的路径到系统路径
current_dir = os.path.dirname(__file__)
folder1_path = os.path.join(current_dir, 'test1')
sys.path.append(folder1_path)


# from demo import add, minus
import demo

if __name__ == '__main__':

    print(demo.add(1, 2))
    print(demo.minus(1, 2))

通过文件夹目录的形式导入

import test1.demo as demo

if __name__ == '__main__':

    print(demo.add(1, 2))
    print(demo.minus(1, 2))

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值