【问题标题】:Error creating .exe (pyinstaller) with cloudscraper module使用 cloudcraper 模块创建 .exe (pyinstaller) 时出错
【发布时间】:2021-07-25 19:45:57
【问题描述】:

我正在尝试从我的 python 脚本创建一个 .exe。该脚本使用 cloudcraper 包。当我创建 .exe 并执行它时,它显示以下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\...\\MEI1....\\cloudscraper\\user_agent\\browsers.json'

该错误仅在我尝试执行 .exe 文件时出现。

为什么会这样? pyinstaller 无法使用 cloudcraper 吗?

项目结构如下:

C:\Users\andre\OneDrive\Documentos\Programming\Python\Python3\proyect

proyect 
   |
   |______ main.py
   |
   |______ services
           |________ __init__.py
           |_______ main_service.py
           |_______ sql_service.py

这与我的项目结构非常相似,因为很明显,我无法分享我项目的实际项目结构。

【问题讨论】:

    标签: python python-3.x pyinstaller


    【解决方案1】:

    查看此链接:https://*.com/a/64586862/14509818

    在创建 exe 时添加此命令。

    --add-data "path_for_cloudscraper_folder;./cloudscraper/"
    

    path_for_cloudscraper_folder 替换为您的 cloudscraper 文件夹的路径。

    您可以从电脑上探索并找到您的cloudscraper文件夹路径或从github下载。

    这里./cloudscraper/用来在你的输出根目录下添加cloudscraper文件夹。 (期望它在根目录中搜索丢失的cloudscraper文件夹)

    【讨论】:

      【解决方案2】:

      您的 .exe 文件正在寻找 browsers.json,但您没有将该文件移动到与 .exe 文件相同的路径。使用 pyinstaller 需要有处理相对路径和绝对路径的良好经验,否则,您将面临此类错误。

      如果 cloudcraper 不属于您的项目树(可能是隐藏导入):

      1. 尝试从here 复制名为“cloudscrapper”的文件夹并将其粘贴到 .exe 文件的同一路径中

      【讨论】:

      • 那么您会建议什么精确的解决方案?如何使用 pyinstaller 将该 json 文件添加到 mi exe 目录?
      • 首先,我们需要您的项目结构。该错误只是告诉您“我找不到此文件”,但在不知道您如何构建项目的情况下很难找出解决方案
      • 现在我已经添加了项目结构,请您在此基础上帮助我吗?
      • 我在您的项目树上看不到您的 cloudcraper 文件夹。这个文件夹在哪里? cloudcraper\\user_agent\\browsers.json
      【解决方案3】:

      找到的解决方案是将所需文件夹复制到 .exe 路径中,但就目前而言,我发现如果您使用的是 --onefile 修改器来创建.exe,而不是你不应该使用它并将cloudscraper文件夹复制到这样的.exe路径中,这应该可以工作

      注意: 该路径是不是父文件夹cloudscraper,而是其中包含user_agent 文件夹的嵌套文件夹

      【讨论】: