如何将Python脚本所在目录动态设置为工作目录?
动态设置Python脚本的工作目录为自身所在路径
如果你需要让脚本自动切换到自身所在的目录,不管脚本被复制到哪里,都可以用Python内置的__file__属性结合os模块来实现,两种常用方案如下:
方案1:直接切换工作目录
这个方法会把当前工作目录改成脚本所在的文件夹,适合需要从脚本目录读取/写入文件的场景:
import os # 获取脚本的绝对路径 script_full_path = os.path.abspath(__file__) # 提取脚本所在的目录路径 script_directory = os.path.dirname(script_full_path) # 切换工作目录到脚本所在目录 os.chdir(script_directory)
__file__属性会返回当前运行脚本的路径,不管你从哪个目录启动脚本,都能准确获取到脚本本身的位置,完全不需要硬编码路径。
方案2:将脚本目录加入模块搜索路径
如果你的需求只是导入同目录下的其他Python文件,其实不需要切换工作目录,直接把脚本目录添加到sys.path里即可,这样Python就能找到同目录的模块:
import os import sys script_directory = os.path.dirname(os.path.abspath(__file__)) # 避免重复添加路径 if script_directory not in sys.path: sys.path.append(script_directory) # 现在可以直接导入同目录的模块了 import your_module_name
注意事项
__file__属性只在脚本文件运行时有效,在Python交互式环境中使用会报错,不过脚本运行场景下完全没问题。- 如果你用PyInstaller等工具把脚本打包成可执行文件,
__file__的行为会略有不同,这时候可以用sys.executable来替代:
import os import sys if getattr(sys, 'frozen', False): # 打包后的可执行文件场景 script_directory = os.path.dirname(sys.executable) else: # 普通脚本场景 script_directory = os.path.dirname(os.path.abspath(__file__)) os.chdir(script_directory)
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

