简体   繁体   中英

path error ImportError: attempted relative import with no known parent package

Project like below

server
├── celery.py
├── tasks.py

tasks.py

from __future__ import absolute_import, unicode_literals
from sys import path 
from .celery import app_celery
from time import sleep


@app_celery.task
def my_func():
    sleep(5)
    print("Process finished")

celery.py

from __future__ import absolute_import, unicode_literals
from celery import Celery

app_celery = Celery('server',
             broker='redis://',
             backend='redis://',
             include=['server.tasks'])

app_celery.conf.update(
    result_expires=3600,
)

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

celery -A server worker -l info starts well, make a test like below and it was perfect

$ ipython
Python 3.7.4 (default, Aug 13 2019, 20:35:49) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from server.tasks import my_func                                                                                                                     

In [2]: my_func.delay()                                                                                                                                      
Out[2]: <AsyncResult: 39a21329-0e80-4f6e-ac08-536832414756>

I want to add a script test.py under server

test.py

from tasks import my_func

my_func.delay()

When I run python test.py under server , it reports

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from tasks import my_func
  File "/xxx/server/tasks.py", line 3, in <module>
    from .celery import app_celery
ImportError: attempted relative import with no known parent package

Add a __init__.py file inside your server directory. This file can be empty.

Python only allows relative imports in regular packages. A regular package is defined as a directory that contains a __init__.py file.

https://docs.python.org/3/reference/import.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM