You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多文件/文件夹编程方法及start.sh、requirements.txt疑问解答

多文件编程相关问题解答

一、多文件编程的实现与作用

实现方法

Python里实现多文件编程很直接:

  • 把不同功能的代码拆分到独立的.py文件中,比如把数据处理逻辑放在data_handler.py,主程序放在main.py
  • 用import语句引用其他文件的内容,比如import data_handler或者from data_handler import process_data
  • 如果用文件夹组织多个文件(也就是Python包),需要在文件夹里加一个__init__.py文件(可以是空文件,用来标识这个文件夹是Python包)

核心作用

  • 模块化拆分:把复杂功能拆成小模块,比如爬虫项目里,请求网页的代码放spider.py,解析数据的放parser.py,找代码、改代码都更方便
  • 代码复用:同一个函数/类可以在多个文件里调用,不用重复写相同的代码
  • 提升可读性:单个文件代码量减少,结构清晰,别人看你的代码能快速理解各个模块的作用
  • 便于协作:多人开发时可以各自负责不同模块,不会互相干扰

二、GitHub常见文件解析

start.sh

这是一个Shell脚本,用来自动化项目启动流程,避免手动敲一堆命令。比如项目需要先装依赖、设置环境变量再运行,把这些步骤写进start.sh,执行一次脚本就能搞定。
示例内容:

#!/bin/bash
# 安装依赖
pip install -r requirements.txt
# 运行主程序
python main.py

运行前需要给脚本加执行权限:chmod +x start.sh,然后执行./start.sh就行。

requirements.txt

用来记录项目依赖的所有Python包和对应的版本号。其他人拿到你的项目时,直接跑pip install -r requirements.txt就能一键安装所有需要的包,避免出现“我这里能跑你那里跑不了”的版本兼容问题。
示例内容:

requests==2.31.0
numpy==1.26.0
pandas==2.1.1

可以用pip freeze > requirements.txt命令自动生成当前环境的依赖列表,不用手动写。

三、导入函数时变量未定义的报错解决

你遇到的问题是变量作用域不匹配:file1里的command()函数找的是它自己作用域里的list,但你把list定义在file2里,两者完全是两个独立的变量,所以会报错“list未定义”。

给你三个实用的解决方法:

方法1:把变量作为参数传给函数

修改file1的代码:

def command(target_list):
    print(target_list)

file2里调用时把list传进去:

my_list = [1,2,3]  # 建议不要用list当变量名,会覆盖内置函数
from file1 import command
command(my_list)

方法2:把共享变量放到单独文件

如果多个文件都要用到这个变量,建议新建一个config.py:

# config.py
my_list = [1,2,3]

然后file1和file2都从这里导入:

# file1.py
from config import my_list
def command():
    print(my_list)
# file2.py
from config import my_list
from file1 import command
command()  # 会打印[1,2,3]

这种方法能避免循环导入的问题,结构也更清晰。

方法3:在函数所在文件定义变量

如果这个变量是command()专用的,直接在file1里定义:

# file1.py
my_list = [1,2,3]
def command():
    print(my_list)

file2导入后直接调用就行:

# file2.py
from file1 import command
command()

内容的提问来源于stack exchange,提问作者Rando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:43:28