如何从终端运行Python代码?子目录脚本运行失败求助
我来一步步帮你搞定这两个问题~
从终端运行Python代码的常见方法
先给你梳理几种常用的终端运行Python代码的方式,日常开发中都能用得上:
- 直接跑单个脚本:如果你的代码就在一个
.py文件里,最简单的方式就是在终端输入python 脚本的路径。比如你在脚本所在的文件夹里,直接敲python test.py就行;要是不在同一文件夹,就写相对路径(比如./segmentation/test.py)或者绝对路径。 - 以模块形式运行:就是你尝试的
python -m 模块名这种方式,但有个前提——目标文件夹得是个合法的Python包。简单说就是这个文件夹里得有个__init__.py文件(哪怕是空的也行,Python3.3+之后支持无这个文件的命名空间包,但有些场景还是需要它来明确这是个包)。这种方式会把当前工作目录加到Python的模块搜索路径里,适合有多个模块互相依赖的项目。 - 交互式测试:直接在终端敲
python(或者python3),就能进入Python的交互环境,逐行敲代码执行,适合快速测试小段逻辑。
解决
python -m segmentation.test无法运行的问题 你现在在processing目录下,想运行segmentation里的test.py但用-m方式失败,大概率是这几个原因,你可以挨个排查:
1. 先确认segmentation是合法的Python包
Python的模块导入系统要求,作为包的文件夹必须有__init__.py文件。你先去segmentation文件夹里看看有没有这个文件:
- 如果没有,就用终端在
processing目录下敲这个命令创建一个空的:
创建完再试试touch segmentation/__init__.pypython -m segmentation.test。
2. 检查Python版本的命令是否正确
有时候系统里同时装了Python2和Python3,python命令默认指向Python2,但你的代码是Python3写的,这时候就会报错。你可以换成python3试试:
python3 -m segmentation.test
3. 确认test.py里有正确的入口逻辑
如果test.py里没写if __name__ == "__main__":这个判断,那用模块方式运行时,可能不会执行你想要的代码。比如你的test.py里应该有类似这样的结构:
# 你的其他业务代码 def main(): # 这里写你要执行的核心逻辑 print("test.py开始运行啦") if __name__ == "__main__": main()
这样用-m方式运行时,才会触发main()函数执行。
4. 确认当前工作目录确实是processing
你可以先敲这个命令看看当前所在路径:
pwd
输出的绝对路径应该是processing的路径,如果不是,就用cd命令切换过去:
cd /你的/processing文件夹绝对路径
备选方案:直接运行脚本
要是上面的方法都不行,你可以试试更直接的方式——直接用脚本路径运行:
python segmentation/test.py
或者用绝对路径:
python /path/to/processing/segmentation/test.py
内容的提问来源于stack exchange,提问作者user9127040




