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

马赛07

我习惯了一种脚本语言,在这种语言中,通常会像这样布置模块:

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
伊芙

必须这样做:

modules/foo/__init__.py  # instead of foo.py
modules/foo/bar.py
modules/foo/baz.py

Perl的布局不起作用。如果模块有子代,则根与子代并存。

值得一提的是,一些Python开发人员强烈认为您应该__init__.py留空(或至少最少),因为它在您导入任何子级时都首先导入。

如果__init__.py对您不起作用,您可能还会遇到其他一些问题,特别是如果您确实有一个modules/目录,但是如果没有更多详细信息,我将无法诊断:)


啊哈 不要惹恼sys.path; 总是表明您正在为自己的生活变得更加艰难。(您是否必须为sys.path导入其他人的代码而烦恼?然后,当正确的代码在那里时,为什么还要自己做呢?)

只需将它们直接放在源树的根目录中即可project.git/foo/bar.py只要从根目录运行测试工具(或其他工具),就可以毫无问题地导入它们。

您可能还想尝试像pytest这样的测试库,它可以为您提供发现和各种奇特的东西。

另请参阅:Python项目的文件系统结构

或者是我的一个较小的项目,以获得更实际的示例:https : //github.com/eevee/dywypi

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从子目录下载文件将保留子目录名称

来自分类Dev

列出子目录中的所有文件,按子目录名称排序

来自分类Dev

将子目录中的多个文件重命名为其目录名称

来自分类Dev

在目录中提取子目录名称的末尾

来自分类Dev

提取目录中子目录名称的结尾

来自分类Dev

以递归方式将输出 PDF 文件重命名为子目录名称 Powershell

来自分类Dev

当子目录名称未知时,Nginx阻止访问子目录

来自分类Dev

如何将文件从具有相同目录名的子目录移至其相对的上层/上层目录?

来自分类Dev

将文件从子目录移动到单个目录并为原始目录名称添加前缀

来自分类Dev

根据子目录名称将文件从特定子目录复制到单个目录中,然后重命名

来自分类Dev

使用批处理文件将父目录名称作为前缀添加到子目录文件

来自分类Dev

在文本文件中获取子目录列表,并使用新的子目录名称附加该txt文件

来自分类Dev

在子目录中的所有.jpg,.mp3和.mts文件前加上各自的父目录名称

来自分类Dev

使用正则表达式模式替换错误的文件,目录和子目录名称

来自分类Dev

Python模块导入问题子目录

来自分类Dev

允许访问特定文件,但在.htaccess的子目录中排除相同名称的文件

来自分类Dev

重命名子目录中与文件夹名称相同的文件

来自分类Dev

具有相同名称子目录的目录移动

来自分类Dev

在Power Shell中使用目录名称属性列出主目录及其子目录

来自分类Dev

根据目录名称将目录划分为子目录

来自分类Dev

Linux将具有相同名称的子目录复制到文件

来自分类Dev

从子目录连接具有相同名称的csv文件

来自分类Dev

删除不同子目录中具有相同名称的文件夹的内容

来自分类Dev

如何将每个子目录中的唯一文件移动到外部并将名称更改为目录名称?

来自分类Dev

如何使用R中的目录和子目录名称创建表?

来自分类Dev

识别两个不同目录之间的公用子目录名称并将其删除

来自分类Dev

终端:列出包含特定目录名称的子目录

来自分类Dev

用空格递归替换目录和子目录名称中的所有点

来自分类Dev

bash:从给定子目录名称的当前目录获取路径

Related 相关文章

  1. 1

    从子目录下载文件将保留子目录名称

  2. 2

    列出子目录中的所有文件,按子目录名称排序

  3. 3

    将子目录中的多个文件重命名为其目录名称

  4. 4

    在目录中提取子目录名称的末尾

  5. 5

    提取目录中子目录名称的结尾

  6. 6

    以递归方式将输出 PDF 文件重命名为子目录名称 Powershell

  7. 7

    当子目录名称未知时,Nginx阻止访问子目录

  8. 8

    如何将文件从具有相同目录名的子目录移至其相对的上层/上层目录?

  9. 9

    将文件从子目录移动到单个目录并为原始目录名称添加前缀

  10. 10

    根据子目录名称将文件从特定子目录复制到单个目录中,然后重命名

  11. 11

    使用批处理文件将父目录名称作为前缀添加到子目录文件

  12. 12

    在文本文件中获取子目录列表,并使用新的子目录名称附加该txt文件

  13. 13

    在子目录中的所有.jpg,.mp3和.mts文件前加上各自的父目录名称

  14. 14

    使用正则表达式模式替换错误的文件,目录和子目录名称

  15. 15

    Python模块导入问题子目录

  16. 16

    允许访问特定文件,但在.htaccess的子目录中排除相同名称的文件

  17. 17

    重命名子目录中与文件夹名称相同的文件

  18. 18

    具有相同名称子目录的目录移动

  19. 19

    在Power Shell中使用目录名称属性列出主目录及其子目录

  20. 20

    根据目录名称将目录划分为子目录

  21. 21

    Linux将具有相同名称的子目录复制到文件

  22. 22

    从子目录连接具有相同名称的csv文件

  23. 23

    删除不同子目录中具有相同名称的文件夹的内容

  24. 24

    如何将每个子目录中的唯一文件移动到外部并将名称更改为目录名称?

  25. 25

    如何使用R中的目录和子目录名称创建表?

  26. 26

    识别两个不同目录之间的公用子目录名称并将其删除

  27. 27

    终端:列出包含特定目录名称的子目录

  28. 28

    用空格递归替换目录和子目录名称中的所有点

  29. 29

    bash:从给定子目录名称的当前目录获取路径

热门标签

归档