PyInstaller打包Scrapy+PyQt5+selenium解决问题

 

首先,打包命令去掉所有不必要附加选项:比如 pyInstaller main.py -y

项目目录结构:

说明一下打包遇到的问题:

1.打包PyQt5缺少Qt动态库

2.Scrapy VERSION 文件不存在

3.打包Scrapy爬虫缺少各种scrapy模块(scrapy自己定义的pipelines,middlewares,settings)

4.缺少配置文件(这里我自己有定义一个config.ini的配置文件,以及chromedriver.exe)

5.scrapy 自己定义的pipelines,middlewares,settings无效

解决方法:(注意文中图片的备注)

1.添加以下代码到入口文件引入PyQt5模块的上方:

import sys, os
if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']

2.在解决第一个问题后,项目中使用了scrapy爬虫的框架,所以会报一个错误;如下:

FileNotFoundError: [Errno 2] No such file or directory:'C:\\Users\\LENOVO\\Desktop\\SEO\\main\\scrapy\\VERSION'
[10816] Failed to execute script main

这里表示缺失文件C:\\Users\\LENOVO\\Desktop\\SEO\\main\\scrapy\\VERSION;

检查桌面SEO\main文件夹中是否缺少VERSION文件或缺少scrapy文件夹(一般情况下都是缺少的:缺少就先创建scrapy文件夹);

接下来我们去到Scrapy的安装目录D:\soft\Anaconda3\envs\python36\Lib\site-packages\scrapy(我这里是这个目录),将mime.types以及VERSION文件复制到桌面上SEO\main\scrapy文件夹中

3.解决上一步后,自己可以测试一下,测试后会出现缺少scrapy模块的问题,这里直接贴代码了

# 这里是必须引入的
# import robotparser

import scrapy.spiderloader
import scrapy.statscollectors
import scrapy.logformatter
import scrapy.dupefilters
import scrapy.squeues

import scrapy.extensions.spiderstate
import scrapy.extensions.corestats
import scrapy.extensions.telnet
import scrapy.extensions.logstats
import scrapy.extensions.memusage
import scrapy.extensions.memdebug
import scrapy.extensions.feedexport
import scrapy.extensions.closespider
import scrapy.extensions.debug
import scrapy.extensions.httpcache
import scrapy.extensions.statsmailer
import scrapy.extensions.throttle

import scrapy.core.scheduler
import scrapy.core.engine
import scrapy.core.scraper
import scrapy.core.spidermw
import scrapy.core.downloader

import scrapy.downloadermiddlewares.stats
import scrapy.downloadermiddlewares.httpcache
import scrapy.downloadermiddlewares.cookies
import scrapy.downloadermiddlewares.useragent
import scrapy.downloadermiddlewares.httpproxy
import scrapy.downloadermiddlewares.ajaxcrawl
import scrapy.downloadermiddlewares.chunked
import scrapy.downloadermiddlewares.decompression
import scrapy.downloadermiddlewares.defaultheaders
import scrapy.downloadermiddlewares.downloadtimeout
import scrapy.downloadermiddlewares.httpauth
import scrapy.downloadermiddlewares.httpcompression
import scrapy.downloadermiddlewares.redirect
import scrapy.downloadermiddlewares.retry
import scrapy.downloadermiddlewares.robotstxt

import scrapy.spidermiddlewares.depth
import scrapy.spidermiddlewares.httperror
import scrapy.spidermiddlewares.offsite
import scrapy.spidermiddlewares.referer
import scrapy.spidermiddlewares.urllength

import scrapy.pipelines
import scrapy.settings
import scrapy.middleware

import scrapy.core.downloader.handlers.http
import scrapy.core.downloader.contextfactory
import scrapy.core.downloader.handlers.ftp
import scrapy.core.downloader.handlers.s3
import scrapy.core.downloader.handlers.file
import scrapy.core.downloader.handlers.datauri

这写代码直接添加到模块引入代码的最后即可;提一句 如果你还有用到其它模块请自行导入

4.因为程序中用到数据库,所以将数据库配置写在config.ini中;以及使用到了Chrome浏览器;所以这两个配置文件也需要复制到桌面文件夹中;

这里就不多说了,这个可以打印一下自己使用配置文件的实际路径,然后将配置文件放到相应的文件夹下面,比如config.ini 在database.py中用到,打印路径后显示的相对路径为myseo\database.py;所以,我们需要在SEO\main\中新建myseo文件夹,然后将config.ini复制到SEO\main\myseo文件夹中(这里注意,一定以你自己的路径为准)

5.如果以上4步都已经解决,你的程序应该可以正常运行起来了,但是你会发现,我们自己定义的中间件,以及数据操作都不会生效,这里是因为我们定义的爬虫规则都在settings中配置的,而在打包的时候,没有找到我们配置的settings,所以pipelines,middlewares会不生效

首先,我们将scrapy.cfg文件复制到SEO\main中。为什么复制它,因为cfg文件中指定了我们配置的settings配置文件的相对路径;内容如下:

# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html

[settings]
default = myseo.settings

[deploy]
#url = http://localhost:6800/
project = myseo

到这里还没完。记得在第三步时提到需要其它模块需要自己导入;所以这里就需要导入我们用到的模块,也就是我们自己定义的pipelines,middlewares;接着导入:

import myseo.settings
import myseo.middlewares
import myseo.pipelines

以上5个问题,5个解决步骤到此就完了,程序启动,运行正常;如果你有遇到以上问题,可以参考我的解决方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyInstaller是一个用于打包Python文件的库,可以将Python脚本转换成可执行文件。对于使用PyQt5编写的脚本进行打包,首先需要确保已经安装了PyInstallerPyQt5。然后,可以按照以下步骤进行打包: 1. 打开终端或命令提示符窗口,并切换到包含主函数文件的目录。 2. 运行以下命令:`pyinstaller your_script.py`,其中"your_script.py"是你要打包的脚本的文件名。 3. PyInstaller将开始分析脚本并创建.spec文件,该文件将包含有关打包过程的配置信息。 4. 在.spec文件中,你可以对打包过程进行更多的自定义配置。可以使用文本编辑器打开.spec文件并进行修改。 5. 对于PyQt5脚本,通常需要添加额外的参数来解决特定的问题。例如,如果脚本中使用了Qt的平台插件(例如QtWebEngine),可能需要使用`--add-data`参数来包含这些插件。具体的参数配置可以参考PyInstaller的文档。 6. 修改完.spec文件后,运行以下命令:`pyinstaller your_script.spec`,其中"your_script.spec"是你修改后的.spec文件的文件名。 7. PyInstaller将开始根据.spec文件进行打包。在打包完成后,你将在当前目录中看到一个名为"dist"的文件夹,里面包含了打包后的可执行文件。 需要注意的是,PyInstaller打包过程可能因为项目的复杂性而有所不同。建议在打包前仔细阅读PyInstaller的文档,并根据你的具体需求进行适当的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [pyinstaller打包pyqt5项目总结](https://blog.csdn.net/Sheleon1995/article/details/125041861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [pyinstaller打包pyqt5程序 全过程 超详细](https://blog.csdn.net/okfu_DL/article/details/84566545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值