当前位置: 首页 > 知识库问答 >
问题:

PyCharm中的子包和相关导入

应志用
2023-03-14
python --version
Python 2.7.13 :: Continuum Analytics, Inc.

我有以下项目结构:

.
└── foo
    ├── bar1
    │   ├── __init__.py
    │   └── mod1.py
    ├── bar2
    │   ├── __init__.py
    │   └── mod2.py
    ├── __init__.py
    └── start.py

start.py

from foo.bar2.mod2 import mod2_f
mod2_f()

mod1.py

def mod1_f():
    print "mod1_f"
from foo.bar1.mod1 import mod1_f

def mod2_f():
    mod1_f()
    print "mod2_f"
python ./foo/start.py
Traceback (most recent call last):
  File "./foo/start.py", line 1, in <module>
    from foo.bar2.mod2 import mod2_f
ImportError: No module named foo.bar2.mod2
from bar2.mod2 import mod2_f
mod2_f()

MOD2.PY

from bar1.mod1 import mod1_f

def mod2_f():
    mod1_f()
    print "mod2_f"

现在可以通过命令行python./foo/start来工作。为什么会有这些差异?

共有1个答案

雍宇定
2023-03-14

foo是包含所有内容的目录,包括start.py

因此,当从start.py执行以下操作时

from foo.bar2.mod2 import mod2_f

python查找foo模块(foo是一个模块,因为它包含__init__.py),这个模块在目录结构中太高了。我认为它可以在IDE中工作,因为IDE将每个模块目录都添加到PythonPath中。但不是从命令行。

from bar2.mod2 import mod2_f
import bar2.mod2.mod2_f
 类似资料:
  • 文件为空。我正在运行Python2.7.1。 运行会导致。 类似问题:关于相对python导入的最终答案,如何在python中进行相对导入?,在python中进行相对导入

  • 我读了无数关于python中相对导入的讨论,我认为它如此令人困惑的原因之一是它在一个python版本之间发生了变化(我的版本是3.6)。但这里的罪魁祸首似乎是PyCharm(除非我弄错了..)我想知道是否有人找到了解决这个问题的办法。对于具有此布局的项目: 假设aa.py在文件中包含一些fuction,如果我编写这个导入: 因此,为了让PyCharm高兴,我可以将添加到导入中,然后错误似乎就解决了

  • 本文向大家介绍Golang import本地包和导入问题相关详解,包括了Golang import本地包和导入问题相关详解的使用技巧和注意事项,需要的朋友参考一下 1 本地包声明 包是Go程序的基本单位,所以每个Go程序源代码的开始都是一个包声明: 这就是包声明,pkgName 告诉编译器,当前文件属于哪个包。一个包可以对应多个*.go源文件,标记它们属于同一包的唯一依据就是这个package声明

  • 我在Pycharm中有一个python项目,其中有一个嵌套的Git子模块。以下是文件夹结构: 中的导入结构如下: 但是,Pycharm没有意识到这一点,而是希望我拥有以下内容: 这是有问题的,因为我不想更改中的所有导入(这似乎不是一个好的实践,也不可扩展),而且中有破折号,这对于导入来说不是有效的Python语法(我无法重命名repo)。 我还需要一种从我的代码中导入的方法。像这样的东西: 但当然

  • 问题内容: 我有两个表:表A和表B 表A和表B都有列。 表A和表B都有列。 表A的一列也称为。 检查条件: 如果表A“键” =恒定,则从表A检索RowId。 从中获取这些行ID,并检查这些行的字段是否>具有相同rowId的表B的> ModifiedAT字段。 Table没有重复的RowId,而Table具有。 我自己尝试的方法: 注意:另外,令我感到惊讶的是,如果我将硬编码值替换为“ 1”,它会起