[英]Cannot import name 'socker'
最初的注意事项:我知道python中有许多这类类型的文章,但是我尝试了许多解决方案,但它们对我没有用。
文件结构:
/nickdima
__init__.py
/test_pong
__init__.py
pong.py
/nickdima/__init__.py:
from flask_socketio import Socketio
socker = SocketIO()
from test_pong import pong
def create_app():
app = Flask(__name__)
socker.init_app(app)
return app
/nickdima/test_pong/pong.py
from __main__ import socker
@socker.on('connect')
def handle_connect():
print('connected')
在Heroku上运行此代码时,出现错误:
from __main__ import socker
ImportError: cannot import name 'socker'
我相当确定这与循环导入有关,但是我无法解决。
我试过了: from test_pong import pong
create_app()
函数内部的from test_pong import pong
到本地“延迟导入”,但无济于事,我得到同样的错误cannot import name 'socker'
好的,所以在进一步检查之后,我提出以下建议:
/nickdima
__init__.py
socker.py
/test_pong
__init__.py
pong.py
/nickdima/socker.py
from flask_socketio import Socketio
socker = SocketIO()
/nickdima/__init__.py:
from nickidima.socker import socker
from nickidima.test_pong import pong
def create_app():
app = Flask(__name__)
socker.init_app(app)
return app
/nickdima/test_pong/pong.py
from nickidima.socker import socker
@socker.on('connect')
def handle_connect():
print('connected')
这样,您将不再具有循环依赖项!
导入相对于放置nickidima
的根目录。 我不确定Heroku如何进行这种导入(实际上我从未使用过Heroku),但我希望您能理解这个想法,并能够根据您的需要进行调整。
最重要的一课:循环依赖几乎总是不良设计的标志,几乎总是可以用非循环依赖来代替。 并且在他们可以的时候:做到这一点。
旁注:我正在遵循您的命名约定(socker?),但认真地,您应该修复它。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.