自定义python包中的导入错误

自定义python包中的导入错误,python,scrapy,Python,Scrapy,在重新组织一个零碎的项目时,我想从我的pipelines.py文件创建一个包 我想改变这个 ├── my_scraper │   ├── __init__.py │   ├── items.py │   ├── pipelines.py │   ├── settings.py │   └── spiders └── scrapy.cfg 对此 ├── my_scraper │   ├── __init__.py │   ├── items.py │   ├── pipe

在重新组织一个零碎的项目时,我想从我的
pipelines.py
文件创建一个包

我想改变这个

├── my_scraper
│   ├── __init__.py
│   ├── items.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
└── scrapy.cfg
对此

├── my_scraper
    │   ├── __init__.py
    │   ├── items.py
    │   ├── pipelines
    │   │   ├── __init__.py
    │   │   ├── MyPipeline1.py
    │   │   ├── MyPipeline2.py
    │   │   └── MyPipeline3.py
    │   ├── settings.py
    │   └── spiders
    └── scrapy.cfg
但是在
pipelines/\uuuu init\uuuuuuu.py

from my_pipeline1 import MyPipeline1
from my_pipeline2 import MyPipeline2
from my_pipeline3 import MyPipeline3
settings.py中输入并引用每个设置

ITEM_PIPELINES = {
'my_scraper.pipelines.MyPipeline1': 100,
'my_scraper.pipelines.MyPipeline2': 200,
'my_scraper.pipelines.MyPipeline3': 300,

}
现在,当我运行
scrapy crawl我的\u scraper
时,我得到了错误

File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
      File "<frozen importlib._bootstrap>", line 969, in _find_and_load
      File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 665, in exec_module
      File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
      File "/Users/path/to/my_scraper/pipelines/__init__.py", line 1, in <module>
        from my_pipeline1 import MyPipeline1
    ImportError: No module named 'my_pipeline1'
导入模块中的第126行“
File”/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/importlib/_init__.py”
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第986行,在_gcd_import中
文件“”,第969行,在“查找”和“加载”中
文件“”,第958行,在“查找”和“加载”中解锁
文件“”,第673行,在“加载”中
exec_模块中第665行的文件“”
文件“”,第222行,在已删除帧的调用中
文件“/Users/path/to/my_scraper/pipelines/_init__uuuuu.py”,第1行,在
从my_管道1导入my管道1
导入错误:没有名为“my_pipeline1”的模块
我不确定我应该如何处理这个问题,以使我的代码在长期内可维护。任何提示/帮助都将不胜感激

但是在pipelines/init.py中导入每个管道类之后

查看您的项目树,上面的内容似乎完全没有必要,事实上您甚至没有任何名为“my_pipeline1”的内容

因此,只需在
管道/\uuu init\uuuuuy.py
中去掉这些行即可
您可以嵌套并在包中包含多个包。在这种情况下,您有
my_spider
软件包,它本身包含
spider
pipelines
软件包,因此您可以使用以下工具安全地导入它们:

from myspider.pipelines.pipelines1 import SomeClass
# or in settings as
ITEM_PIPELINES = {
    'myspider.pipelines.pipelines1.MyPipeline': 100,
}

您确定“my_scraper1”吗?如果是,您确实只有MyPipeline1、MyPipeline2和MyPipeline3在管道中。\uuu init\uuu谢谢@Granitosaurus!@Zach没问题,如果您发现答案足够,请随意单击左侧的“接受答案”按钮:)
from myspider.pipelines.pipelines1 import SomeClass
# or in settings as
ITEM_PIPELINES = {
    'myspider.pipelines.pipelines1.MyPipeline': 100,
}