os.path的注意事项

这段代码使用os.path和sys模块获取程序路径,构建配置文件和日志文件夹的路径。当用pyinstaller打包后,os.path.abspath(__file__)会导致路径问题,因此使用os.path.dirname(os.path.realpath(sys.argv[0]))来正确获取脚本路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

os.path

base_path = os.path.dirname(os.path.realpath(sys.argv[0]))
cfg_path = base_path + r'/config.ini'
log_path = base_path + r'/logs'

def get_log_path():
    # base_path = os.path.dirname(os.path.abspath(__file__))
    print("log_path:",log_path)
    return os.path.join(log_path, 'logs')

单独使用os.path.dirname(os.path.abspath(file))

这样使用pyinstaller打包后,当前目录会变成C盘,不是真正的程序路径
上述代码为解决办法

update

base_path = os.path.dirname(os.path.realpath(sys.argv[0]))

def get_log_path():
    # base_path = os.path.dirname(os.path.abspath(__file__))
    return os.path.join(base_path, 'logs')

这段代码主要是在处理文件路径的问题。它使用了Python的os和sys模块来获取程序的当前路径,并构建了配置文件(config.ini)和日志文件夹(logs)的路径。

首先,os.path.dirname(os.path.realpath(sys.argv[0]))这行代码的作用是获取当前执行脚本的绝对路径。os.path.realpath()函数返回指定文件的规范路径,消除其中可能存在的符号链接等;os.path.dirname()函数则返回文件所在的目录。sys.argv[0]表示当前执行的脚本名。

然后,cfg_path = base_path + r'/config.ini'这行代码是在当前脚本所在目录下添加’/config.ini’,得到配置文件的完整路径。

同样,log_path = base_path + r'/logs'这行代码是在当前脚本所在目录下添加’/logs’,得到日志文件夹的完整路径。

最后,get_log_path()函数的作用是返回日志文件夹的完整路径。这个函数没有参数,直接返回os.path.join(base_path, 'logs')的结果,即当前脚本所在目录下的’logs’文件夹的完整路径。

关于你提到的单独使用os.path.dirname(os.path.abspath(__file__))的问题,这是因为__file__是Python中的一个内置变量,它表示当前执行的脚本的文件名。当你直接运行这个脚本时,__file__的值就是脚本的文件名,所以os.path.abspath(__file__)得到的就是脚本的绝对路径。但是,如果你使用pyinstaller等工具将脚本打包成一个可执行文件,那么__file__的值就会变成可执行文件的路径,而不是脚本的路径。这就是为什么在使用pyinstaller打包后,当前目录会变成C盘,而不是真正的程序路径的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值