如何全局配置Python路径,无需在每个demo脚本重复添加?
无需重复添加路径代码的解决方案
针对你的项目场景(始终从顶层py目录运行脚本),有几种不用在每个demo脚本里加路径代码的方法:
方法1:设置PYTHONPATH环境变量
Python会优先从PYTHONPATH环境变量指定的路径里查找模块,你只需要把顶层py目录加入这个变量:
- 临时生效(仅当前终端会话):
- Linux/macOS:在
py目录下执行export PYTHONPATH=$(pwd) - Windows cmd:在
py目录下执行set PYTHONPATH=%cd% - Windows PowerShell:在
py目录下执行$env:PYTHONPATH = (Get-Location).Path
- Linux/macOS:在
- 永久生效:把上述对应系统的命令添加到shell配置文件(比如Linux的
~/.bashrc、macOS的~/.zshrc),或者Windows的系统环境变量中。
设置完成后,所有demo脚本里直接写from util.util_fn1 import foo即可正常导入。
方法2:将项目安装为可编辑包
利用pip的可编辑模式,把整个项目加入Python的模块搜索路径:
- 在
py目录下创建pyproject.toml文件(推荐),内容如下:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my_project" version = "0.1" packages = ["util"]
- 在
py目录下执行命令:pip install -e .
安装完成后,无论在哪个路径(只要在当前Python环境),都能直接导入util模块,demo脚本无需任何路径相关代码。
方法3:用统一入口脚本启动demo
在py目录下创建一个启动脚本run_demo.py,内容如下:
import importlib import sys if __name__ == "__main__": if len(sys.argv) < 2: print("用法:python run_demo.py demo1") sys.exit(1) demo_name = sys.argv[1] demo_module = importlib.import_module(f"demo.{demo_name}") # 若demo脚本有main函数,自动调用 if hasattr(demo_module, "main"): demo_module.main()
之后运行demo时,在py目录下执行python run_demo.py demo1即可。由于是从顶层目录启动,Python默认会将当前目录加入模块搜索路径,demo脚本里直接写导入语句就行。
内容的提问来源于stack exchange,提问作者Brian Day
相关产品推荐
相关产品推荐

