pyinstaller打包启动由于requests报错

问题:pyinstaller打包python项目,启动报错requests,如果是类似的报错,就是request证书没有打包进项目

    from .db_schema import DBSchemaAssembler  # noqa: F401
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "dbgpt/rag/assembler/db_schema.py", line 12, in <module>
    from ..embedding.embedding_factory import DefaultEmbeddingFactory
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "dbgpt/rag/embedding/__init__.py", line 8, in <module>
    from .embeddings import (  # noqa: F401
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "dbgpt/rag/embedding/embeddings.py", line 6, in <module>
    import requests
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/__init__.py", line 164, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/api.py", line 11, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/sessions.py", line 15, in <module>
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
  File "requests/adapters.py", line 81, in <module>
FileNotFoundError: [Errno 2] No such file or directory

解决:

项目根目录下有*.spec文件,文件中datas,参数添加datas=[((‘具体路径/certifi/cacert.pem’,‘certifi’))]
cacert.pem文件位置替换你环境下绝对路径

PyInstaller 是一个用于将 Python 程序打包成独立的可执行文件的工具。它可以将 Python 程序及其所有依赖项打包成一个单独的可执行文件,方便在没有安装 Python 环境的机器上运行。然而,在使用 PyInstaller 打包时,可能会遇到一些依赖文件的问题。 ### PyInstaller 打包库存在其他依赖文件的情况 1. **第三方库依赖**: - 有些第三方库可能包含一些二进制文件或数据文件,这些文件在打包时需要被包含进去。PyInstaller 通常会自动检测并包含这些文件,但有时可能需要手动指定。 2. **数据文件依赖**: - 如果你的程序依赖于一些数据文件(如配置文件、图片、音频等),这些文件需要在打包时包含进去。你可以使用 `--add-data` 选项来指定这些文件。 3. **动态导入的模块**: - 如果你的程序在运行时动态导入模块,PyInstaller 可能无法自动检测到这些模块。你可以使用 `--hidden-import` 选项来手动指定这些模块。 ### 使用示例 假设你的程序 `my_script.py` 依赖于一个数据文件 `config.yaml` 和一个第三方库 `requests`,你可以使用以下命令进行打包: ```sh pyinstaller --onefile --add-data "config.yaml:." --hidden-import=requests my_script.py ``` ### 解释 - `--onefile`:将所有内容打包成一个单独的可执行文件。 - `--add-data "config.yaml:."`:将 `config.yaml` 文件包含进去,并在可执行文件中将其放在当前目录下。 - `--hidden-import=requests`:手动指定需要包含的模块 `requests`。 ### 常见问题 1. **打包后的可执行文件太大**: - 这是因为 PyInstaller 会将所有依赖项都打包进去。你可以使用 `--exclude-module` 选项排除一些不必要的模块。 2. **程序运行时报错找不到模块**: - 这可能是由于 PyInstaller 没有自动检测到某些动态导入的模块。使用 `--hidden-import` 选项手动指定这些模块。 3. **数据文件未包含**: - 使用 `--add-data` 选项确保数据文件被包含进去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小豆子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值