2017-06-28 2 views
1
  1. scrapy crawl <spider_name>は私のプロジェクトで問題なく動作します。予想通り、私は民間のページをクロールしてアイテムを主張スモークテストで'ImportError:煙検査で<project_name> .settings'という名前のモジュールがありません

  2. です。私はスモークテストのために有効で、このENVのVARを設定した後os.environ['SCRAPY_SETTINGS_MODULE'] = '<project_name>.settings'

  3. を設定setUp()中のenv VARを設定終わる深刻なプロジェクトのリファクタリングを、終了するまで

  4. 物事はscrapy crawl'ImportError: No module named <project_name>.settings'をと文句を言い、罰金でした

  5. scrapy.cfg設定は、このスモークテストを除く他のすべてのものが正常に動作し、正しいです。

  6. os.environ.pop('SCRAPY_SETTINGS_MODULE')の前に問題がなくなり、os.sys('scrapy crawl <spider_name>')の前に問題がなくなりましたが、これは正しく感じられません。

だから、誰かが私に問題を引き起こしたことと、それを修正する適切な方法は何かを教えてください!

答えて

1

私は理由を見つけた:scrapyは、プロジェクトのメインディレクトリがsys.pathに追加された場合os.environ['SCRAPY_SETTINGS_MODULE']は、設定されていない場合scrapy.utils.conf.init_envが呼び出されscrapy.utils.project.get_project_settingsを実行

scrapy crawl前に。

このenv varを設定すると、sys.path scrapy getsのコピーにプロジェクトのメインディレクトリのパスがないため、インポートが失敗します。

os.environ['SCRAPY_SETTINGS_MODULE']がポップアウトすると、init_envが呼び出されるため、scrapy crawlは想定どおり動作します。回避策のもう1つは、os.environ['PYTHONPATH']をプロジェクトのメインディレクトリパスに設定することです

最終的には、治療法を変更し、os.environ['SCRAPY_SETTINGS_MODULE']のチェックを無効にし、常にinit_envを実行する方法があります。これの最悪のコストは、scrapy crawlが実行されるたびに、scrapyはプロジェクトのメインディレクトリパスを一度探します。これは私にはあまり効果がないようです。また、追加する前にチェックされているので、パスはsys.pathに何度も追加されません。

それについてですが、おかげで、私はどこか間違っていたら教えてください!

関連する問題