【问题标题】:What is the right way to create project structure in pycharm?在pycharm中创建项目结构的正确方法是什么?
【发布时间】:2014-02-03 20:27:17
【问题描述】:

我是 python 新手,不知道如何以正确的方式组织项目结构,所以所有自动导入都可以在 pycharm 中工作。

这是我目前的结构。

在 PublisherSubscriberTest pycharm 中生成了这个导入

from Rabbit.RabbitReceiver import RabbitReceiver
from Rabbit.RabbitSender import RabbitSender

但它不起作用。这就是输出。

ImportError: 没有名为 Rabbit.RabbitReceiver 的模块

我做错了什么?

我比较熟悉java。例如,在 java 中,我只需创建包含一些类的包,然后我就可以将它们导入项目中的任何位置。 AFAIK 它与 python 不一样。

谁能给我解释一下?

编辑1: 是的,我知道 sys.path.append。我曾经这样做过,但这对我来说似乎很奇怪,我希望没有它也能做到。

【问题讨论】:

  • 你能粘贴你当前的项目结构(目录和文件)吗?
  • python 2 还是 python 3?
  • Python 2.7。好吧,我的项目结构在屏幕截图中。你还需要什么?

标签: python package pycharm


【解决方案1】:
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

【讨论】:

  • 哦,是的。我知道那件事。这就是我以前做的。我认为这很不方便,并且希望能够在我的项目中导入包而不附加它们是 sys.path。
  • 它不适用于 -m 选项。还是一样的导入错误。
  • @user1685095 你怎么看?
  • 好吧,基本上我根本不需要相对导入。我实际上最终得到了类似这样的东西 python -m unittest tests.ArchiveTest
  • @user1685095 很高兴您解决了这个问题。也许最好写下你下次想要达到的目标。对于您最初的问题,这应该是足够的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多