python sys.path.append 获取上一级目录 获取上上级目录

python sys.path.append 获取上一级目录 获取上上级目录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • python sys.path.append 获取上一级目录 获取上上级目录
  • 前言
  • 一、目录结构
  • 二、方法
  • 三、获取db_tool.py中的方法
  • 总结


前言

python程序 遇到 执行文件 调用上级目录或其他目录下的配置文件的情况

一个由字符串组成的列表,用于指定模块的搜索路径。初始化自环境变量 PYTHONPATH,再加上一条与安装有关的默认路径。

程序启动时将初始化本列表,列表的第一项 path[0] 目录含有调用 Python 解释器的脚本。如果脚本目录不可用(比如以交互方式调用了解释器,或脚本是从标准输入中读取的),则 path[0] 为空字符串,这将导致 Python 优先搜索当前目录中的模块。注意,脚本目录将插入在 PYTHONPATH 的条目之前

程序可以随意修改本列表用于自己的目的。只能向 sys.path 中添加 string 和 bytes 类型,其他数据类型将在导入期间被忽略。

sys #https://docs.python.org/zh-cn/3/library/sys.html#sys.path

pathlib #https://docs.python.org/zh-cn/3/library/pathlib.html


一、目录结构

F:\PYTHON-WORK\PROJECT
│ app.py

├─logs
└─src
│ db_tool.py

├─api
├─script
│ a.py

├─statics
└─temp

二、方法

方法 作用
os.getcwd() 获取当前目录
os.path.join() 拼接路径
os.path.dirname() 获取上一级目录
os.path.abspath() 获取绝对路径
Path(“path”).parent 获取上一级目录

三、获取db_tool.py中的方法

pwd #F:\PYTHON-WORK\PROJECT

python app.py   #调用db_tool  from src.db_tool import get

pwd #F:\PYTHON-WORK\PROJECT\src\script

python a.py		#调用db_tool

这个时候因为在script下执行 a.py 所以获取不到src 需要通过sys.path.append 追加父级目录

import sys
print(sys.path)
sys.path.append("F:\PYTHON-WORK\PROJECT")  #追加project目录,使python执行时优先搜索project目录
#或者使用 pathlib sys.path.append(str(Path(__file__).parent.parent.parent))
print(sys.path)
from src.db_tool import get
#输出
    ['F:\\PYTHON-WORK\\PROJECT\\src\\script', 'F:\\install\\miniconda\\python39.zip', 'F:\\install\\miniconda\\DLLs', 'F:\\install\\miniconda\\lib', 'F:\\install\\miniconda']
    ['F:\\PYTHON-WORK\\PROJECT\\src\\script', 'F:\\install\\miniconda\\python39.zip', 'F:\\install\\miniconda\\DLLs', 'F:\\install\\miniconda\\lib', 'F:\\install\\miniconda', 'F:\\PYTHON-WORK\\PROJECT']

然后把绝对路径换成相对路径

sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))

建议不要用 sys.path.append(“…/…”)

这个是根据当前执行python a.py 的位置 执行 …/…/ 而不是以文件所在的位置 执行 …/…/


总结

linux crontab 执行的位置为当前用户的根目录

你可能感兴趣的:(乱七八糟,python,开发语言,pycharm)