最简单直接的方式
这是最基本、最常用的方法,前提是你的系统已经安装了 Python。
直接使用 python 命令
python your_script.py
解释:
python:这是 Python 解释器的命令,在大多数 Linux 和 macOS 系统上,这通常会指向你安装的 Python 3(或者 Python 2,如果系统中同时存在的话)。your_script.py:这是你要运行的 Python 文件的路径和文件名。
示例:
假设你有一个名为 hello.py 的文件,内容如下:
# hello.py
print("Hello from Python!")
name = input("What's your name? ")
print(f"Hello, {name}!")
你可以在同一个目录下打开终端,运行:
python hello.py
输出将会是:
Hello from Python!
What's your name? Alice <-- 在这里输入 Alice
Hello, Alice!
使用 python3 命令(推荐)
为了明确使用 Python 3 版本(目前主流),并且避免与系统可能存在的 Python 2 冲突,强烈推荐使用 python3 命令。
python3 your_script.py
示例:
python3 hello.py
效果与上面完全相同,但更明确、更安全。
处理文件路径(关键部分)
当你的 Python 文件不在当前工作目录时,就需要使用文件路径,路径有两种表示方式:绝对路径 和 相对路径。
场景设定
假设你的文件结构如下:
/home/user/my_project/
├── main.py
└── scripts/
└── utils.py
你想从 /home/user/my_project/ 目录运行 main.py,而 main.py 需要导入 scripts/utils.py。
使用绝对路径
绝对路径是从根目录 开始的完整路径,无论你在哪个目录下,它都能唯一地指向文件。
运行脚本:
假设你想运行 /home/user/my_project/scripts/utils.py,你可以这样做:
# 从任何目录都可以运行 python3 /home/user/my_project/scripts/utils.py
优点:
- 精确无误,不会出错。
- 适合在脚本(如 cron job)中固定运行某个文件。
缺点:
- 路径很长,不易阅读和书写。
- 如果项目目录被移动,脚本就会失效。
使用相对路径
相对路径是相对于你当前所在(工作)目录的路径。
假设你当前在 /home/user/my_project/ 目录下:
-
运行当前目录的
main.py:python3 main.py
-
运行子目录
scripts下的utils.py:python3 scripts/utils.py
-
运行上一级目录的某个文件(不常见,但了解一下):
# 假设你在 /home/user/my_project/scripts/ 目录下 python3 ../main.py
优点:
- 简短、灵活,适合在手动操作时使用。
- 当项目整体移动时,只要相对关系不变,命令通常仍然有效。
更改工作目录(cd)
有时,你更希望进入脚本所在的目录再运行它,这样可以简化命令,并且脚本中的相对文件引用(如 open('data.txt'))也能正常工作。
# 1. 切换到脚本所在的目录 cd /path/to/your/script/directory # 2. 直接运行脚本 python3 your_script.py
示例:
回到上面的文件结构,你想运行 scripts/utils.py:
# 先进入 scripts 目录 cd scripts # 再运行文件 python3 utils.py
这样做的好处是,utils.py 需要读取同目录下的 config.json 文件,代码 open('config.json') 就能找到它,而无需复杂的路径处理。
在 Python 脚本内部获取路径
Python 脚本本身需要知道它自己的位置,以便加载其他文件或数据,这时可以在 Python 代码中使用 __file__ 变量。
__file__ 是一个 Python 内置变量,它存储了当前模块(.py 文件)的路径。
示例:
修改 scripts/utils.py,让它打印出自己的路径,并读取同目录下的一个文件。
-
创建
scripts/data.txt为Hello from data file! -
修改
scripts/utils.py:# scripts/utils.py import os # 获取当前脚本所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 构建要读取的文件的绝对路径 data_file_path = os.path.join(script_dir, 'data.txt') print(f"Current script path: {__file__}") print(f"Script's directory: {script_dir}") print(f"Attempting to read: {data_file_path}") # 读取文件内容 try: with open(data_file_path, 'r') as f: content = f.read() print(f"File content: {content}") except FileNotFoundError: print(f"Error: Could not find the file at {data_file_path}") -
从项目根目录运行它:
python3 scripts/utils.py
输出:
Current script path: /home/user/my_project/scripts/utils.py
Script's directory: /home/user/my_project/scripts
Attempting to read: /home/user/my_project/scripts/data.txt
File content: Hello from data file!
这种方法非常稳健,无论你从哪个目录运行 python3 scripts/utils.py,它总能正确地找到自己的位置和 data.txt 文件。
常见问题与解决方法
错误:bash: python: command not found
或 bash: python3: command not found
原因: 系统的 PATH 环境变量中没有包含 Python 解释器的安装路径。
解决方案:
- 安装 Python:如果你还没有安装,请先安装,在 Ubuntu/Debian 上:
sudo apt-get install python3,在 macOS 上,推荐使用 Homebrew:brew install python。 - 找到 Python 路径:使用
which python3命令找到python3的完整路径,/usr/bin/python3。 - 创建符号链接(不推荐新手使用):或者你可以创建一个软链接,但这可能会覆盖系统原有的
python命令,需谨慎。
错误:ModuleNotFoundError: No module named 'requests'
原因: 你的 Python 脚本导入了一个第三方库(如 requests),但该库尚未安装在你的 Python 环境中。
解决方案:
使用 pip(Python 的包安装器)来安装它。强烈建议使用 pip3 以确保安装到 Python 3 的环境中。
# 安装 requests 库 pip3 install requests # 如果遇到权限问题,可以使用 sudo(不推荐)或用户模式安装(推荐) # pip3 install --user requests
错误:Permission denied
原因: Python 脚本文件没有“执行”权限。
解决方案:
使用 chmod 命令为文件添加执行权限。
# 为所有者添加读、写、执行权限 chmod u+x your_script.py # 或者更简单地添加执行权限 chmod +x your_script.py
添加权限后,你甚至可以直接运行它(无需 python3 前缀,前提是文件第一行有 "Shebang"):
#!/usr/bin/env python3
print("Hello, I'm executable!")
然后运行:
./your_script.py
| 场景 | 命令 | 说明 |
|---|---|---|
| 当前目录运行 | python3 script.py |
最基本、最常用的方法。 |
| 使用绝对路径 | python3 /full/path/to/script.py |
从任何位置运行,路径固定,适合自动化。 |
| 使用相对路径 | python3 sub_dir/script.py |
路径较短,灵活,适合手动操作。 |
| 先切换目录 | cd /path/to/script && python3 script.py |
简化命令,方便脚本内部处理相对路径。 |
| 脚本内部定位 | os.path.dirname(os.path.abspath(__file__)) |
在代码中获取脚本自身的绝对路径,非常稳健。 |
对于日常工作,掌握 python3、相对路径 和 cd 命令就足以应对绝大多数情况,对于编写健壮的脚本,__file__ 和 os.path 模块是你的好朋友。
