如何调用具有相对路径的父python文件中的文件?

2024-09-19 23:38:05 发布

您现在位置:Python中文网/ 问答频道 /正文

就像这样diagram。你知道吗

当我导入模块时“库达马特.py“或”eignmat.py公司". 我遇到了一个“找不到文件问题”。实际上,在这两个文件中,作者处理利贝格马特“具有相对路径。你知道吗

with open("libeigenmat.so", 'r') as file:
     file.read()

但是当我运行“run*.py”时,我在子文件夹中,因此python解释器找不到“利贝格马特". 你知道吗

你们能帮我解决这个问题吗?在相对路径中使用文件操作如何调用父方法?更具体地说,如何更改eignmat.py公司库达马特.py使这两个文件在任意路径中可用?你知道吗

谢谢


Tags: 模块文件runpyreadsoaswith
3条回答

run命令应该总是从项目的根目录调用。类似地,您应该将带有可导入函数的脚本包装到package。有不同的方法可以做到这一点,比如使用sys.path.append或使用相对导入,但是如果您是Python处理导入的初学者,那么这确实是两条很好的经验法则。实际上,即使你不是初学者,这也是一个很好的练习

按以下方式重新组织项目:

parent\
   run.py
   my_package\
       eigenmat.py
       cudamat.py
       __init__.py

__init__.py告诉Python将它所在的文件夹视为可导入模块的内容。在run.py中,使用语句from my_package import eigenmatfrom my_package import cudamat。也可以使用完全相同的语句在eigenmat.pycudamat.py之间导入。你知道吗

您可以使用.符号来表示层次结构中更高的目录,将单个.放在文件路径的开头,但它表示“此文件所在的文件夹”,因此要从父目录获取文件,您可以使用..

with open("../libeigenmat.so", 'r') as file:
     file.read()

More specifically, How could I change the eignmat.py or cudamat.py to make these two file available in arbitrary path?

首先获得绝对路径,然后将其与文件结合起来,就可以确定目标。你知道吗

import os

file_path = os.path.abspath(os.path.dirname(__file__)).replace('\\', '/')

with open(os.path.join(file_path, "libeigenmat.so"), 'r') as file:
    a = file.read()

相关问题 更多 >