Python Scrapy:从';它不在同一个目录中

Python Scrapy:从';它不在同一个目录中,python,import,scrapy,Python,Import,Scrapy,我正试图从我的项目中导入一个包,它与scrapy不在同一目录中。我的项目的目录结构如下: Main __init__.py /XPaths __init.py XPaths.py /scrapper scrapy.cfg /scrapper __init.py settings.py items.py pipelines.py /spiders myspider.py 我正在

我正试图从我的项目中导入一个包,它与scrapy不在同一目录中。我的项目的目录结构如下:

Main
  __init__.py
  /XPaths
    __init.py
    XPaths.py
  /scrapper
    scrapy.cfg
    /scrapper
      __init.py
      settings.py
      items.py
      pipelines.py
      /spiders
        myspider.py
我正在尝试从
myspider.py
中访问
xpaths.py
。以下是我的尝试:

1)
从Main.XPaths.XPaths导入XPathsHandler

2)
从XPaths.XPaths导入XPathsHandler

3)
from..Xpaths.Xpaths导入XPathsHandler

这些操作失败,错误为:

ImportError: No module named .......
ValueError: Attempted relative import beyond toplevel package
我最后一次尝试是:

4)
from…Xpaths.Xpaths导入xpathsandler

这也失败了,错误如下:

ImportError: No module named .......
ValueError: Attempted relative import beyond toplevel package
我做错了什么<代码>XPath独立于Scrapy,因此文件结构必须保持这种状态

//编辑

在@alecxe注释之后进行了一些进一步的调试之后,我尝试将路径添加到
sys.path
中的
main
,并在导入XPath之前将其打印出来。奇怪的是,当我运行scrapy时,
scraper
目录被追加到路径中。以下是我补充的内容:

'C:\\Users\\LaptOmer\\Code\\Python\\PythonBackend\\Main'
下面是我打印
sys.path
时得到的结果:

'C:\\Users\\LaptOmer\\Code\\Python\\PythonBackend\\Main\\scrapper'

为什么scrapy会将其附加到路径中?

我知道这有点混乱,但只有当我遇到与您相同的问题时,我才能找到一个解决方案。在包含项目中的文件之前,您需要手动将系统路径附加到最顶层的包级别,即:

sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
from XPaths.XPaths import XPathsHandler
...
据我所知,Scrasty创建自己的包-这就是为什么不能从其他目录导入文件。这也解释了错误:

ValueError: Attempted relative import beyond toplevel package

我遇到了同样的问题

当我使用:

sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
它将
。/..
附加到最后一个文件路径,但该路径无效。我注意到我的主文件是sys.path列表中的最后一项。我带上最后一个项目,进入模块级查找我的主文件——其中包含一个名为“extract_notes”的函数


希望对您有所帮助。

如果您将
Main
包附加到
sys.path
中,第一个应该可以使用-请尝试一下。我现在尝试了,但不起作用-仍然会收到相同的错误。您确定这是相同的路径吗?Scrapy在运行时补充道:这并不漂亮,但是唯一有效的方法,在此之前,我尝试了其他帖子的3条建议。