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

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

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


前言

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 执行的位置为当前用户的根目录

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mtl1994

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值