导入Python包的混淆

2 投票
1 回答
856 浏览
提问于 2025-04-17 18:19

我有一个包叫做 celery,还有一个文件也叫 celery。

当我输入 import celery 的时候,它试图导入的是那个 celery 文件,而不是 celery 包。结果它说无法导入 Celery。

from __future__ import absolute_import
from celery import Celery


celery = Celery('celery_app',
                broker='redis://localhost:6379/0',
                backend='amqp://',
                include=['celery_app.tasks'])

# Optional configuration, see the application user guide.
celery.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600,
)

if __name__ == '__main__':
    celery.start()

就像下面这样。有没有办法解释一下,怎么才能导入包而不是文件。

编辑:

我试过了

from __future__ import absolute_import
import sys
del sys.path[0]
from celery import Celery

但结果还是一样。当我在 Python 命令行里运行那些命令时,并没有报错。是不是我漏掉了什么?

1 个回答

1

当我在Python命令行中尝试那些命令时,没有出现任何错误。我是不是漏掉了什么?

我真的推荐像大家说的那样重命名你的文件,不过你可以试试

import sys, os
[sys.path.remove(i) for i in sys.path if i == os.getcwd() or i == '']
from celery import Celery

另外,你在导入absolute_import,但看起来并没有使用它(文档)。当你从本地文件celery.py导入时

from .celery import my_func

撰写回答