【记录】踩坑记录、Linux命令窗口运行Python脚本和Pycharm运行python脚本的路径问题

本文记录了在Pycharm中和Linux服务器上运行Python脚本时遇到的路径问题。Pycharm会自动将项目路径添加到系统路径,而Linux则不会。当尝试从脚本调用上级目录的包时,需要手动添加路径。解决方案是利用__file__变量获取脚本的绝对路径,并添加到sys.path中。需要注意的是,__file__在不同运行环境下返回的路径形式不同,需要通过os.path.abspath()获取绝对路径来确保正确引用。

记录一个坑;pycharm中运行,会添加项目目录到系统路径,所以不管在哪一级目录调用项目目录都是可以的,但是;在Linux服务器上,程序的运行目录就是当前脚本目录,这个时候就无法像pycharm中一样调用到上级目录;

 

1)首先在调用python包的时候,例如pycharm上,如果你要调用上级目录中的包,例如:

在 naroto里面调用 config.py中的Config类, 你可以这么写

from config.config import Config

这样在IDE里直接运行是没有问题的,这是因为IDE默认添加了项目的各级路径到sys.path当中,

root_dir

    |--config

    |--zoro

也就是说python解释器会查找路径root_dir下的python包,所以这样调用时没有问题的。

但是在服务器上运行的时候,它不会自动添加路径到sys.path中,所以你调用会出问题。你可以print(sys.path)除了安装包添加的路径,

它只在脚本同级目录下找包。所以导不进来!

解决方法是在程序当中手动添加路径,你可以使用__file__变量

root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 包的根目录
sys.path.append(root)

这种方法在程序运行的时候临时添加,对系统环境没有影响,写在导包之前就可以顺利导入了!

注意,这里还有一个坑!__file__变量在ide返回的其实是绝对路径,但是在服务器上返回的是当前运行层(程序运行的起点)到脚本的路径,比如,你在root_dir目录下运行python zoro/naroto.py  其中脚本中__file__ 就是zoro/naroto.py,进入到zoro目录下运行 python naroto.py 就是__file__ == naroto.py。 所以还得使用os.path.abspath(__file__)返回绝对路径,再得到上级目录,然后添加。 这样就没问题了!!

在哪一层运行脚本都没问题!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值