我是python的新手,我不知道如何以正确的方式组织项目结构,因此所有自动导入都可以在pycharm中使用。
这是我目前的结构。
在PublisherSubscriberTest中,pycharm生成了此导入
from Rabbit.RabbitReceiver import RabbitReceiver
from Rabbit.RabbitSender import RabbitSender
但它不起作用。那是输出。
ImportError:没有名为Rabbit.RabbitReceiver的模块
我做错了什么?
我对java比较熟悉。例如在java中,我只是创建包含一些类的包,然后我就可以在项目的任何地方导入它们。 AFAIK它与python不一样。
有人可以向我解释一下吗?
EDIT1: 是的,我知道sys.path.append。我曾经这样做,但对我来说这似乎很奇怪,我希望能够在没有它的情况下做到这一点。
答案 0 :(得分:2)
import sys, os.path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from Rabbit.RabbitReceiver import RabbitReceiver
from Rabbit.RabbitSender import RabbitSender
如果您不想修改sys.path
,唯一的方法是在运行时添加-m
标志
python -m messaging_system.tests.PublisherSubscriberTest
请参阅How to fix "Attempted relative import in non-package" even with __init__.py
好的,最后我找到了一个终极答案: Relative imports for the billionth time
我建议你仔细阅读那篇文章,我从中学到了很多东西。
简而言之,如果您想这样做,则必须将path-to-Rabbit
添加到sys.path
。