pyinstaller打包包含celery任务的项目总是失败解决方式

当我们在使用pyinstaller打包发布包含celery任务的项目时,如果出现项目打包成功了,但是运行的时候只要开启celery进程报错:exe:maximum recursion depth exceeded while calling a Python object…,即使通过sys.setrecursionlimit设置系统最大递归深度也解决不了问题时,莫慌,我教你怎么解决。

ps:为防止某些大聪明照搬下面代码编译出现问题,我先将注意事项交代在前,项目根目录下最好别在dist文件夹下存放代码文件,因为下面的解决方式中,构建编译文件时会自动覆盖这个文件夹下的所有文件,如果你的项目根目录下有这两个文件夹,请修改为其他名称!!!

OK,我们正式进入主题。首先,在你的项目根目录(与入口相同目录)下新建build.py(该文件名称可自由命名)文件,如下:
在这里插入图片描述
build.py文件中输入以下代码:

#!/usr/bin/env python
# cython: language_level=3
# -*- coding: utf-8 -*-
# @Author  : LuBowen
# @Number  : 20210509
# @FileName  :build
# @Time      :2023/9/7 13:37
# @Software: PyCharm Community Edition
# @Version : Python3
# ====================================
from subprocess import call
from distutils.core import setup
from Cython.Build import cythonize
import os
import shutil
from tqdm import tqdm

# 用于编译的工程根目录绝对路径(此处替换为你的项目根目录-即入口文件所在目录的绝对路径)
project_dir = "D:/projectsFiles/vision"
# 非编译文件绝对路径-包含的文件将不会被编译,并会在项目编译完成后直接复制到编译后的项目目录中(如果你的项目中存在不需要编译的python文件或者其他文件,请将其绝对路径放到下面的列表中,这些文件将不会被编译且会在项目编译完成后自动复制到编译后的项目包/文件夹中)
include_files = [
        "D:/projectsFiles/vision/.env",
        "D:/projectsFiles/vision/DockerFile",
        "D:/projectsFiles/vision/r.txt",
]


# noinspection PyMissingOrEmptyDocstring
def collect_file(project_path, direct_name=None, file_end=('pyd', 'o'), include=()):
    project_path_direct_name = os.path.basename(project_path)
    if not direct_name:
        direct_name = project_path_direct_name
    base_path = f'{
     
     project_path}/dist/{
     
     direct_name}'.replace('\\', '/')
    for root, dirs, files in os.walk(project_path):
        root_format = str(root).replace('\\', '/')
        if base_path in f'{
     
     root_format}/{
     
     direct_name}':
            continue
        if os.path.abspath('./build').replace('\\', '/') in root_format:
            continue
        if os.path.abspath('./dist').replace('\\', '/') in root_format:
在使用PyInstaller打包使用Celery的Django应用程序时,你需要注意一些特殊的配置。下面是一个基本的步骤: 1. 确保你已经安装了PyInstallerCelery: ``` pip install pyinstaller celery ``` 2. 进入你的Django项目的根目录,并创建一个新的目录用于存放打包后的文件: ``` mkdir dist ``` 3. 在项目根目录下创建一个名为`myapp.spec`的文件,用于配置PyInstaller打包选项。在该文件中添加以下内容: ``` # myapp.spec import django import os from PyInstaller.utils.hooks import collect_submodules hiddenimports = collect_submodules('django') hiddenimports += collect_submodules('celery') a = Analysis(['manage.py'], pathex=[os.getcwd()], hiddenimports=hiddenimports, hookspath=None) a.datas += [ (os.path.join(django.__path__[0], 'conf', 'project_template', 'manage.py'), 'django/conf/project_template/manage.py') ] pyz = PYZ(a.pure, a.zipped_data, cipher=None) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='manage', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, runtime_tmpdir=None, console=True ) ``` 4. 在项目根目录下执行以下命令,使用`myapp.spec`文件进行打包: ``` pyinstaller myapp.spec ``` 5. 打包完成后,在`dist`目录下会生成可执行文件。你可以将整个`dist`目录复制到其他机器上运行你的Django应用程序。 请注意,上述步骤只是基本配置,实际情况可能因项目结构和依赖项而有所不同。你可能还需要在`myapp.spec`文件中添加其他的隐藏导入项和数据文件,以确保打包后的应用程序能够正常运行Celery任务。此外,确保在打包过程中包含Celery所需的配置文件和依赖项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值