如何使用 pyinstaller 为 scrapy 项目生成.exe 文件?

如何使用 pyinstaller 为 scrapy 项目生成.exe 文件?

我只需使用 pyQt5 设计器创建桌面应用程序即可。当我直接使用时,一切运行正常

python main.py 而我尝试使用生成.exe文件pyinstaller 当我打开该应用程序时,它正在创建 .exe 文件,它挂了。有人能解决我的问题吗?

pyinstaller --onefile main.py 或者 pyinstaller main.py 我尝试了所有这些方法。即使在终端中运行 main.exe 也无法推送任何错误。

___________main.py_________
import os
import sys
import qt5reactor
from PyQt5 import QtWidgets, QtCore, QtGui
from scrapy import signals
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
import twisted
from window import Ui_MainWindow
from quotes_scrapy.spiders.qscrapy import QscrapySpider


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.pushButton.pressed.connect(self.on_url_entered)
        self.pushButton.pressed.connect(self.getComboValue) #Added New
        self.tableWidget.horizontalHeader().setSectionResizeMode(
            QtWidgets.QHeaderView.ResizeToContents
        )

    def crawler_results(self, item):
        row = self.tableWidget.rowCount()
        title = item["title"]
        author = item["author"]
        tags = item["tags"]
        self.tableWidget.insertRow(row)
        self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(title))
        self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(author))
        self.tableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(tags))

    def on_url_entered(self):
        configure_logging()
        runner = CrawlerRunner()
        runner.crawl(QscrapySpider, page_num=self.getComboValue())

        for p in runner.crawlers:
            p.signals.connect(self.crawler_results, signal=signals.item_scraped)

    def closeEvent(self, event):
        super(MainWindow, self).closeEvent(event)
        twisted.internet.reactor.stop()

    def getComboValue(self):
        return self.comboBox.currentText()

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    if 'twisted.internet.reactor' not in sys.modules:
        qt5reactor.install()
    from twisted.internet import reactor
    main_window = MainWindow()
    main_window.show()
    reactor.run()

答案1

这可能没用,但你可以把所有导入放在最上面。你在 main() 处有一个导入。把它放在最上面,然后再试一次,也许这会有帮助。

我还使用 Pyqt 制作了许多项目,并使用 pyinstaller 进行捆绑。它们对我来说非常有效。

相关内容