I/O错误:从其他目录导入python文件时无法打开资源

I/O错误:从其他目录导入python文件时无法打开资源,python,io,reportlab,Python,Io,Reportlab,我正在使用ReportLab生成pdf。但当我试图在其中附加图像时,它会给出错误。如果我不包括图像,那么一切都很好。代码成功运行 我有以下目录结构 parentDir\ main.py childDir\ __init__.py first.py second.py image.jpg main.py from childDir.first import methodOfFirst #using methodOfFirs

我正在使用ReportLab生成pdf。但当我试图在其中附加图像时,它会给出错误。如果我不包括图像,那么一切都很好。代码成功运行

我有以下目录结构

parentDir\
   main.py
   childDir\
       __init__.py
       first.py
       second.py
       image.jpg
main.py

from childDir.first import methodOfFirst

  #using methodOfFirst
第一,派克

from second import methodOfSecond

   #using methodOfSecond
二等兵

#this second.py file have **ReportLab** Code
   .............
   canvas.drawImage('image.jpg', 0.2*inch, 11.12*inch, width=w*scale, height=h*scale)
   .............
这是我的代码的基本框架。但当我执行时,它会生成错误:

raise IOError('Cannot open resource "%s"' % name)
 IOError: Cannot open resource "tjsservices.jpg"
   handle_pageBegin args=()
我不熟悉python和reportLab,所以不知道导入这种层次结构的正确方法是什么。如果所有文件都在同一个目录中,那么它可以正常工作。但是当我使用这种目录结构时,它失败了

为了简单起见,我提供了这个框架。如果需要更多代码,请告诉我

所以问题是。为什么会出现此错误以及如何解决?这是ReportLab的问题(即ReportLab不支持这种导入)还是我导入文件的方式错误?
任何帮助都将不胜感激

所有文件系统操作都是相对于的,而与您所在的Python模块无关

在second.py中,可以按如下方式计算路径:

import os.path
fn = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'image.jpg')
canvas.drawImage(fn, 0.2*inch, 11.12*inch, width=w*scale, height=h*scale)

您的路径应该是相对于您实际运行的文件,而不是相对于您正在导入的模块


因此,您需要将图像路径更改为'childDir/image.jpg',提供完整路径(或动态确定),或者将图像路径作为参数传递给导入函数。

这对我理解实际概念有很大帮助+感谢你的回答简单明了。非常感谢你。