如何让Python包从自身目录查找内部文件而非当前运行目录
问题根源
- 你代码中使用的
os.path.join("dir", "file.ext")属于相对路径,Python拼接相对路径时默认会以代码执行时的当前工作目录作为基准,而非class_objects.py文件所在的目录作为基准,所以才会定位到你运行代码的工作目录下的路径,找不到包内部的文件。
修复步骤
1. 修改class_objects.py的路径拼接逻辑
使用Python内置的__file__变量获取当前脚本的绝对路径,再基于这个路径拼接包内部的文件路径,修改后代码如下:
import os class Naive(object): ... def find_and_run(self): # 注意实例方法必须加self参数,原代码漏写会触发调用报错 # 获取当前class_objects.py文件所在的目录绝对路径 current_py_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接包内部dir/file.ext的绝对路径 out_dir = os.path.join(current_py_dir, "dir", "file.ext") naive_model = RunThing(stan_file=out_dir)
额外提醒:检查文件名拼写,你目录结构里
dir下的文件是file.exe,但代码和报错里写的是file.ext,如果是拼写错误要同步修正。
2. 配置打包规则,确保非py文件被打包进安装包
Python默认打包时只会包含.py文件,你需要修改pyproject.toml添加包数据配置,让dir下的文件也被打包:
[tool.setuptools.package-data] "my-package" = ["dir/*"]
修改完成后重新构建、重新安装本地包即可生效。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

