Python3安装Celery模块后执行Celery命令报错

Python3安装Celery与SSL模块问题
本文解决了一个在CentOS 6.7上使用Python3安装Celery后无法执行Celery命令的问题。通过重新编译安装Python并添加SSL支持解决了_import_ssl错误。

Python3安装Celery模块后执行Celery命令报错

1 Python3安装Celery模块后执行Celery命令报错

pip3 install celery
# 安装正常,但是执行celery 命令的时候提示没有_ssl模块什么的

手动在Python解释器中导入,发现有如下错误。

[root@namenode ~]# python3
Python 3.6.4 (default, Dec 21 2017, 17:26:43)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3/ssl.py", line 60, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: No module named _ssl
>>>

由于系统为CentOS 6.7,内置的是Python2.6,使用2.6测试是正常的,怀疑是不是编译安装时的问题。

2 编译安装Python3

下面是我编译安装Python3的步骤

1、执行编译配置检查
    ./configure  --prefix=/usr/local/python3

2、编译
    make

3、安装
    make install

基本都这样安装的没有报什么错。

3 排错

查阅网上资料说编译安装时需要依赖SSL,然后我就添加了如下参数重新编译安装。

1、执行编译配置检查
    ./configure  --with-ssl --prefix=/usr/local/python3  

2、编译
    make

3、安装
    make install

在配置检查阶段提示少了部分ssl文件,缺少openssl的部分文件,我又执行了如下命令

yum install -y openssl-devel

这样就允许安装的python3使用ssl功能模块,进入python3中,执行import ssl发现未出错,正常再次调用celery,发现正常,问题解决!

PS:自己安装的Python3,命令行进入解释器,如果delete键删除乱码的话,可以按照如下方式解决

# 安装多行依赖
yum install -y readline readline-devel

# 重新编译python3
make & make install

  

posted @ 2017-12-21 19:26 Dahlhin 阅读( ...) 评论( ...) 编辑 收藏
### 解决方案 在 Django 中遇到 `ModuleNotFoundError: No module named celery.utils.timeutils` 的问题,通常是由于 Celery 和 django-celery 版本不兼容引起的。以下是具体的分析和解决方案: #### 1. 问题原因 从引用内容可以看出,`celery.utils.timeutils` 模块在较新的 Celery 版本中已被移除或重构[^4]。具体来说: - 在 Celery 4.x 及更高版本中,`timeutils` 被替换为 `celery.utils.time` 模块。 - 如果项目中仍然使用了旧版的 `djcelery` 或者依赖了旧版 API,则会导致该错误。 #### 2. 解决方法 根据引用中的信息[^3],可以采取以下几种解决方法: #### 方法一:降级 Celery 版本 如果项目中仍然使用了 `django-celery`(已废弃),需要将 Celery 降级到与之兼容的版本。例如: ```bash pip install celery==3.1.26.post2 ``` 这将安装一个支持 `celery.utils.timeutils` 的旧版本 Celery。 #### 方法二:升级到最新版本并替换模块 如果希望使用最新的 Celery 版本,则需要调整代码以适配新的模块路径。例如,将以下代码: ```python from celery.utils.timeutils import timedelta_seconds ``` 替换为: ```python from celery.utils.time import timedelta_seconds ``` 同时,确保移除了对 `django-celery` 的依赖,因为该库已经不再维护,并且与 Celery 4.x 不兼容。 #### 方法三:检查 `settings.py` 配置 某些情况下,`settings.py` 文件中可能提前导入了与 Celery 不兼容模块。根据引用内容[^2],可以尝试注释掉 `INSTALLED_APPS` 中的 `&#39;django_celery_beat&#39;`,然后重新运行项目以验证问题是否解决。 #### 方法四:版本兼容性调整 确保所有相关库的版本保持一致。根据引用内容[^3],以下是一个兼容的版本组合示例: ```plaintext celery==4.4.1 django-celery-beat==2.0.0 django-celery-results==1.0.4 Django==2.2.8 redis==3.2.0 ``` #### 示例代码 以下是一个完整的配置示例,适用于 Celery 4.x 和 Django 2.x: ```python # settings.py import os CELERY_BROKER_URL = os.environ.get(&#39;CELERY_BROKER_URL&#39;, &#39;redis://localhost:6379/0&#39;) CELERY_RESULT_BACKEND = os.environ.get(&#39;CELERY_RESULT_BACKEND&#39;, &#39;redis://localhost:6379/0&#39;) # tasks.py from celery import Celery from celery.utils.time import timedelta_seconds app = Celery(&#39;myproject&#39;, broker=CELERY_BROKER_URL) @app.task def example_task(): print("Task executed") ``` ### 注意事项 - 确保虚拟环境中没有残留的旧版本 Celery 或 django-celery。 - 使用 `pip freeze > requirements.txt` 记录当前环境的依赖版本,便于后续排查问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值