杰瑞科技汇

Shell中如何正确运行Python文件路径?

最简单直接的方式

这是最基本、最常用的方法,前提是你的系统已经安装了 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,让它打印出自己的路径,并读取同目录下的一个文件。

  1. 创建 scripts/data.txtHello from data file!

  2. 修改 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}")
    
  3. 从项目根目录运行它:

    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 解释器的安装路径。

解决方案:

  1. 安装 Python:如果你还没有安装,请先安装,在 Ubuntu/Debian 上:sudo apt-get install python3,在 macOS 上,推荐使用 Homebrew:brew install python
  2. 找到 Python 路径:使用 which python3 命令找到 python3 的完整路径,/usr/bin/python3
  3. 创建符号链接(不推荐新手使用):或者你可以创建一个软链接,但这可能会覆盖系统原有的 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 模块是你的好朋友。

分享:
扫描分享到社交APP
上一篇
下一篇