就这样diagram。
当我在“ cudamat.py”或“ eignmat.py”中导入模块时。我遇到了“找不到文件问题” 。实际上,在这两个文件中,作者使用相对路径来处理“ libeigenmat.so” 。
with open("libeigenmat.so", 'r') as file:
file.read()
但是当我运行“ Run _ *。py”时,我在子文件夹中,因此python解释器找不到“ libeigenmat.so”。
那么,你们可以帮我解决这个问题吗?如何在相对路径中通过文件操作调用父方法?更具体地说,如何更改 eignmat.py 或 cudamat.py 以使这两个文件在任意路径下可用?
谢谢
答案 0 :(得分:0)
您可以使用.
符号来表示层次结构中的更高目录,在文件路径的开头放置一个.
,但是引用的是“该文件所在的文件夹”,因此从父目录获取文件,您将使用..
with open("../libeigenmat.so", 'r') as file:
file.read()
答案 1 :(得分:0)
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 eigenmat
或from my_package import cudamat
。您也可以使用完全相同的语句在eigenmat.py
和cudamat.py
之间导入。
答案 2 :(得分:0)
您可以使用os.getcwd()来获取当前的工作目录,并使用os.path.join()来构建文件的路径,以便只要您从以下位置执行代码,它就始终可以找到文件的正确路径。基本目录。
import os
with open(os.path.join(os.getcwd(),'libeigenmat.so'), 'r') as file:
file.read()
答案 3 :(得分:0)
更具体地说,如何更改eignmat.py或cudamat.py,以使这两个文件在任意路径中可用?
首先获取绝对路径,然后将其与文件结合使用即可。
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()