ScrapyをPyinstallerでexe化する

#概要
Pyinstallerでexe化まではできたが、exeファイルを起動するとクラッシュした。
完全に動作させる方法が分かったのでメモする。

#環境
OS:Windows 10
言語:Python3.7
scrapyバージョン:1.7.3

#前提
scrapyのspiderを作成済みで、さらにscrapyファイルを動かすスクリプトファイルがあること。

下記のような構成
demo_scrapy/
├── scrapy.cfg
├── lauch_demo.py　←これがscrapyファイルを動かすスクリプトファイル
└── demo_scrapy
　　　　├── __init__.py
　　　　├── __pycache__
　　　　├── items.py
　　　　├── middlewares.py
　　　　├── pipelines.py
　　　　├── settings.py
　　　　└── spiders
　　　　　　　　├── __init__.py
　　　　　　　　├── demo_spider.py
　　　　　　　　└── __pycache__

lauch_demo.pyの中身
import datetime
import time
from scrapy.spiderloader import SpiderLoader
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

now = datetime.datetime.now()
dt_now_date = now.strftime("%Y-%m-%d-%H%M%S")
settings = get_project_settings()

settings.set('FEED_URI', 'demo' + '_' + dt_now_date + '.csv')
process = CrawlerProcess(settings)
process.crawl('demo_spider', domain='demo.com')
process.start() # the script will block here until the crawling is finished

print("完了しました")

#問題点
ここで、通常通りlaunch_demo.pyを起動すると正常に動作するが、
ただPyinstallerでexe化してもexeファイルは動かない。

下記の方法を実行する。

#解決方法
1.VERSION　と　mime.types　ファイルをscrapyフォルダを任意の場所に作りそこに保存しておく。
VERSIONとmime.typesは
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\scrapy
に保存されている。

2.hidden-importを追加する。
コマンドプロンプトにて
pyinstaller --hidden-import scrapy.spiderloader --hidden-import scrapy.statscollectors --hidden-import scrapy.logformatter --hidden-import scrapy.extensions --hidden-import scrapy.extensions.corestats --hidden-import scrapy.extensions.corestats --hidden-import scrapy.extensions.telnet --hidden-import scrapy.extensions.memusage --hidden-import scrapy.extensions.memdebug --hidden-import scrapy.extensions.closespider --hidden-import scrapy.extensions.feedexport --hidden-import scrapy.extensions.logstats --hidden-import scrapy.extensions.spiderstate --hidden-import scrapy.extensions.throttle --hidden-import scrapy.core.scheduler --hidden-import scrapy.squeues --hidden-import queuelib --hidden-import scrapy.core.downloader --hidden-import scrapy.downloadermiddlewares --hidden-import scrapy.downloadermiddlewares.robotstxt --hidden-import scrapy.downloadermiddlewares.httpauth --hidden-import scrapy.downloadermiddlewares.downloadtimeout --hidden-import scrapy.downloadermiddlewares.defaultheaders --hidden-import scrapy.downloadermiddlewares.useragent --hidden-import scrapy.downloadermiddlewares.retry --hidden-import scrapy.downloadermiddlewares.ajaxcrawl --hidden-import scrapy.downloadermiddlewares.redirect --hidden-import scrapy.downloadermiddlewares.httpcompression --hidden-import scrapy.downloadermiddlewares.redirect --hidden-import scrapy.downloadermiddlewares.cookies --hidden-import scrapy.downloadermiddlewares.httpproxy --hidden-import scrapy.downloadermiddlewares.stats --hidden-import scrapy.downloadermiddlewares.httpcache --hidden-import scrapy.spidermiddlewares --hidden-import scrapy.spidermiddlewares.httperror --hidden-import scrapy.spidermiddlewares.offsite --hidden-import scrapy.spidermiddlewares.referer --hidden-import scrapy.spidermiddlewares.urllength --hidden-import scrapy.spidermiddlewares.depth --hidden-import scrapy.pipelines --hidden-import scrapy.dupefilters --hidden-import scrapy.core.downloader.handlers.datauri --hidden-import scrapy.core.downloader.handlers.file --hidden-import scrapy.core.downloader.handlers.http --hidden-import scrapy.core.downloader.handlers.s3 --hidden-import scrapy.core.downloader.handlers.ftp --hidden-import scrapy.core.downloader.webclient --hidden-import scrapy.core.downloader.contextfactory "C:/path/to/launch_demo.py"

を実行する。もし「module not found XXX」と出たら、--hidden-import XXXを追加する。

3.作成された.\dist\lauch_demo\　のフォルダの中に1で作ったscrapyフォルダを格納する。

4.exeファイルを実行するとうまくいく。

#参考文献
How to create a single executable file in windows 10 with scrapy and pyinstaller?
https://stackoverflow.com/questions/55331478/how-to-create-a-single-executable-file-in-windows-10-with-scrapy-and-pyinstaller

Pyinstaller scrapy error:
https://stackoverflow.com/questions/25557693/pyinstaller-scrapy-error

#最後に
もしお気づきの点などありましたらご指摘ください。
ありがとうございました。