在 Python 中,相对路径是相对于当前工作目录而言的,而不是相对于代码文件所在的路径。因此,在不同的环境中调用相同的代码时可能会出现路径错误。

为了解决这个问题,您可以采用以下两种方法:

使用 os.path 模块获取文件路径
在代码中使用绝对路径的方式最简单有效,但是这样不利于代码的移植性和可读性。另一种方法是使用 os.path 模块动态获取文件路径。可以通过以下方法获取当前 .py 文件所在目录的路径:

python
import os

dir_path = os.path.dirname(os.path.abspath(file))
上述代码中,file 表示当前 .py 文件的路径,os.path.abspath() 方法将其转换为绝对路径,os.path.dirname() 方法返回该路径的父目录。这样,dir_path 变量就是当前 .py 文件所在目录的路径。

然后,您可以使用 os.path.join() 方法构建相对路径并打开文件:

python
file_path = os.path.join(dir_path, "filename.ext")
with open(file_path, "r") as f:
    # do something with the file

在上述代码中,os.path.join() 方法将当前目录与文件名连接起来,得到完整的文件路径。然后,使用 with open() 语句打开文件,其中 r 表示只读模式。更多关于 open() 的参数和用法,请参见 Python 官方文档。

使用 pkg_resources 模块管理文件资源
当您的 Python 代码是作为一个包安装和发布时,可以使用 pkg_resources 模块来管理文件资源。该模块提供了一组 API,可以在包中动态查找并加载文件,而无需担心相对路径问题。

首先,将需要访问的文件添加到包中(通常是将其放在与 init.py 同级的目录下),然后在代码中使用 pkg_resources 模块来访问该文件:

python
import pkg_resources

根据包名和文件名获取文件路径

file_path = pkg_resources.resource_filename("package_name", "filename.ext")

打开文件

with open(file_path, "r") as f:
    # do something with the file

在上述代码中,resource_filename() 方法根据包名和文件名返回完整的文件路径。其中,“package_name” 应该替换为您的包名,“filename.ext” 应该替换为您要访问的文件名。

希望这些解决方法可以帮助您避免在 Python 中调用文件相对路径时出现的问题。[1][2]