我正在尝试使用pytest测试一个抓痒的蜘蛛。我想确保已经使用该特定名称生成了一个蜘蛛说X。我可以使用以下代码片段从脚本中抓取蜘蛛:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
spiders = list(process.spiders._spiders.keys())
但是,当我试图在pytest中运行相同的代码片段时,出现错误:
ModuleNotFoundError: No module named 'project_name.settings'
我的项目目录如下。
**project_name**
├── __init__.py
├── scrapy.cfg
├── setup.py
├── **project_name**
│ ├── cli
│ ├── conftest.py
├── __init__.py
├── settings.py
├── spiders
├── tests
├── unit
我认为问题出在我创建pip包的方式上,因为scrapy的get_project_settings()
正在请求project_name.settings
的setup.py中已“重新映射”的project_name.project_name.settings
模块,但是pytest不知道在哪里找到该project_name.settings
。它可以看到它是否为project_name.project_name.settings
,但不能看到它。这是我的setup.py:
from setuptools import setup
from setuptools import find_packages
setup(
name='project_name',
description='',
version='0.1',
packages=find_packages(),
)
现在,我不知道如何让pytest理解project_name.settings
实际上意味着project_name.project_name.settings
使用setup.py或pytest插件。有人可以帮忙吗?
答案 0 :(得分:0)
子文件夹必须具有相同的名称吗?无论如何,它无法使用该名称查找模块,因为它不存在。您需要通过在其中添加空白的 init .py文件,将 project_name 子目录作为模块。您可能还需要从设置内部或完整路径中指定相对路径。因此,.project_name
或project_name.project_name
。希望这可以帮助。