【问题标题】:Convert all relative imports to absolute automatically in python在python中自动将所有相对导入转换为绝对导入
【发布时间】:2014-12-18 14:51:26
【问题描述】:

我正在尝试正确构建我的 python 2.7 项目(它需要几个子目录)。 我在每个级别都添加了 __init__.py 文件,在导入的情况下,“最佳”实践似乎是使用 absolute进口类:

import top_package_folder.package_subfolder.module_name

代替:

import .module_name

即使我的代码位于 package_subfolder 目录中。

正如我最近了解到的那样,我现在正在寻找一种方法来自动将所有这些相对导入转换为绝对导入。

(我尝试了 autopep8,但无法将导入设为绝对值。)

提前致谢。

【问题讨论】:

  • 为什么你认为最好使用绝对导入?
  • @martineau,这是个好问题。我在网上搜索后得出了这个结论,这表明对于作为包运行的项目,绝对导入在某种程度上是“强制性的”,直到 python 2.5 之后 Guido 不再提到它,但暗示相对导入仍然有用仅在特定情况下(但没有详细说明)。
  • 顺便说一句,关于相对进口的最佳答案:stackoverflow.com/a/14132912/3607939
  • 你会发现大多数 python 开发者更喜欢from top_package.sub_package import module_name 风格。 import top_package_folder.package_subfolder.module_name 让你的代码异常冗长

标签: python import


【解决方案1】:

你可以使用absolufy-importshttps://github.com/MarcoGorelli/absolufy-imports

安装

pip install absolufy-imports

用作预提交挂钩

有关说明,请参阅pre-commit

示例.pre-commit-config.yaml:

-   repo: https://github.com/MarcoGorelli/absolufy-imports
    rev: v0.3.1
    hooks:
    -   id: absolufy-imports

命令行示例

$ cat mypackage/myfile.py
from . import __version__

$ absolufy-imports mypackage/myfile.py

$ cat mypackage/myfile.py
from mypackage import __version__

免责声明:我是这个小包的作者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多