gpt4 book ai didi

python - PyCharm 中的子包和相关导入

转载 作者:行者123 更新时间:2023-11-28 17:13:18 25 4
gpt4 key购买 nike

我正在使用 python 2:

python --version
Python 2.7.13 :: Continuum Analytics, Inc.

我有以下项目结构:

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

开始.py

from foo.bar2.mod2 import mod2_f
mod2_f()

mod1.py

def mod1_f():
print "mod1_f"

mod2.py

from foo.bar1.mod1 import mod1_f

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

如果我从 IDE 运行 start.py,一切正常。

但是使用这样的东西:

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

现在,假设我将导入更改为

开始.py

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然而,PyCharm 提示道。为什么会有这些差异?

最佳答案

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

所以当您从 start.py 执行此操作时

from foo.bar2.mod2 import mod2_f

python 寻找一个 foo 模块(foo 是一个模块,因为它包含 __init__.py),这在你的目录结构中太高了。我想它在 IDE 中工作,因为 IDE 将每个模块目录添加到 pythonpath。但不是来自命令行,它不是。

简单修复,因为 bar2 是与 start.py 处于同一级别的目录:

from bar2.mod2 import mod2_f

请注意 from 在 python 3 中的工作方式不同。参见 ImportError on python 3, worked fine on python 2.7 ,这可能就是 PyCharm 在修复导入行时提示的原因。您应该配置 PyCharm 以便它使用 Python 2 而不是 Python 3 来工作,或者完全删除 from 语法并执行:

import bar2.mod2.mod2_f

关于python - PyCharm 中的子包和相关导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com