LoginSignup
4
6

More than 3 years have passed since last update.

ScrapyをPyinstallerでexe化する

Last updated at Posted at 2019-11-09

概要

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

最後に

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

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6