使用模块运行的方式
假设有如下代码结构:
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))