让我开始说,我在SE上看了几个答案,但没有一个解决了我的问题。
我有一个具有常规结构的应用程序
new_project/
new_project/
spiders/
__init__.py
my_spyder.py
tests/
__init__.py
test_my_spyder.py
__init__.py
items.py
middlewares.py
...
scrapy.cfg
在我的 test_my_spyder.py 中,我需要来自my_spyder.py
和items.py
的类,所以我的代码是这样的:
import unittest
from scrapy.http import Request, HtmlResponse
from new_project.spiders import MyOwnSpider
from new_project.items import MyItem
class TestMySpyderSpider(unittest.TestCase):
def test_something(self):
...
如果我使用python -m unittest test_my_spyder
目录中的new_project/
,则会得到
ModuleNotFoundError:没有名为“ test_my_spyder”的模块
但是,如果我从tests/
目录内部运行相同的命令,则返回值为:
从new_project.spiders导入MyOwnSpider
ModuleNotFoundError:没有名为“ new_project”的模块
命令scrapy crawl spider-name
完美运行。
-
现在,我尝试了所有事情:
1::在内部 test_my_spyder.py
中进行了尝试,没有区别。
import sys, os
sys.path.insert(0, os.path.dirname(__file__))
2 :有或没有,没有区别:
if __name__ == '__main__':
unittest.main()
3:所有这些变体:
from new_project.new_project.spiders import MyOwnSpider
from spiders import MyOwnSpider
from spiders.my_spyder import MyOwnSpider #ModuleNotFoundError: No module named 'spiders'
from .spiders.my_spyder import MyOwnSpider #ImportError: attempted relative import with no known parent package
from ..spiders.my_spyder import MyOwnSpider #ImportError: attempted relative import with no known parent package
此外,我发现了很多地方,人们经常提到“将文件夹的路径添加到环境变量(PYTHONPATH)”。