gpt4 book ai didi

子目录名称与文件相同的Python模块布局

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:44 24 4
gpt4 key购买 nike

我习惯了一种脚本语言,在这种语言中,像这样布置模块是很常见的:

lib/Foo.pm
lib/Foo/Bar.pm
lib/Foo/Baz.pm

在你有 Foo.pm 的地方,有一个名为 Foo 的目录,你可以在下面放置子模块。

在 Python 中,我尝试模仿这样的布局:

modules/foo.py
modules/foo/bar.py
modules/foo/baz.py

但是,这行不通,因为当我这样做时:

from foo import Foo

Python 认为我正在导入名为“foo”的目录而不是 foo.py。我试图搞乱 init.py 业务无济于事。

有没有办法解决这个问题?我觉得 Python 无法区分目录 foo 和文件 foo.py 很烦人。

编辑:我想我错过了一个重要的部分。我通过单元测试获取 modules/目录,因此整个目录结构如下所示:

modules/foo.py
modules/foo/bar.py
modules/foo/baz.py
tests/unit.py

在 unit.py 中,我有以下内容:

#!/usr/bin/python

import sys
import os

findbin = os.path.abspath(os.path.dirname(sys.argv[0]))
sys.path.append(findbin + "/../modules")

from foo import Foo

obj = Foo()

当我运行它时,我得到:

from foo import Foo
ImportError: cannot import name Foo

最佳答案

您要创建的是包。

在文件夹 foo 中放置一个名为 __init__.py 的空白文件。然后 Python 会将 foo 视为一个包。如果 modules 也被视为一个包,则在其中也放置一个空白的 __init__.py

所以从你的问题来看,如果包正确完成并且你有这个结构:

modules/__init__.py
modules/foo/__init__.py
modules/foo/bar.py
modules/foo/baz.py

你可以这样做:

import module
from module import foo
from module.foo import bar
import module.foo.bar as foobar

还有很多其他的东西!

关于子目录名称与文件相同的Python模块布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902363/

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