小毅
发布于 2026-05-04 / 0 阅读
0
0

Python 运行脚本的方式

假设有这样的目录结构

project/
├─ pcie_grpc_server/
│  ├─ __init__.py
│  ├─ server.py
│  ├─ config.py
│  └─ service.py
└─ pyproject.toml

我们想运行 server.py 有两种方式,一种是把 pcie_grpc_server 包里的 server 模块当作模块运行

python -m pcie_grpc_server.server

另一种当作普通 python 脚本

python .\server.py

前者(-m 的方式) Python 会认为:

__name__ = "__main__"
__package__ = "pcie_grpc_server"

所以在 server.py 里可以正常使用包内相对导入:

from .config import Configfrom .service import PcieService

也可以使用绝对导入:

from pcie_grpc_server.config import Configfrom pcie_grpc_server.service import PcieService

这种方式更适合正式项目、包、库、服务程序

后者(直接运行的方式) Python 会认为 server.py 是一个独立脚本,大致相当于:

__name__ = "__main__"
__package__ = None

所以如果 server.py 里写了:

from .config import Config

很可能报错:

ImportError: attempted relative import with no known parent package

因为 Python 不知道这个脚本属于 pcie_grpc_server 包。


评论