【问题标题】:Python - converting imports to module formatPython - 将导入转换为模块格式
【发布时间】:2020-06-26 09:33:02
【问题描述】:

我有一个使用导入构建的 Python 包,就好像脚本从包的根目录运行一样。所以结构看起来像这样:

foo/
    script.py
    bar/
        import_a.py
    bar_two/
        import_b.py

低级包中的导入,例如在 import_b.py 中的结构类似于

from bar import import_a

如果您想将其重新构建为一个包而不是从根目录运行脚本,这显然会中断。我需要重新执行所有导入语句,并将 __init__.py 文件添加到每个子目录(这是在 python 2.7 中,因为我必须将它与预先存在的 ros kinetic repo 一起使用,而初始 repo 在 python 3 )。

我的问题是双重的:是否有一种简单的方法/脚本来转换导入,是否有某种方法可以自动生成相应的 __init__.py 文件?

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    从 Python 2.7 的角度来看,这甚至不是一个包,因为它遗漏了所有 __init__.py 文件(并且当时不存在命名空间包)。所以没有办法创建这些__init__.py 文件。但这应该相对容易。您可以从 (to-be-) 包的根目录使用以下 Python sn-p:

    import os
    
    for item in os.walk('.'):
        path = item[0]
        with open(os.path.join(path, '__init__.py'), 'w') as fh:
            pass
    

    对于 import 语句的修改,有一种方法可以绕过它。导入包时可以将根__init__.py脚本的文件路径添加到sys.path。也就是你可以在最顶端的foo/__init__.py中添加如下代码:

    import os
    import sys
    sys.path.append(os.path.split(__file__)[0])
    

    这样,所有导入都可以通过搜索该目录来解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-21
      • 2015-10-06
      • 2018-11-01
      • 2020-11-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多