Python仅导入包内的模块

标签 python python-import relative-import

我正在创建一个包含多个模块的 Python 包。我想确保当我在包中导入模块时,它们只从包中导入,而不是包外具有相同名称的东西。

这样做的正确方法是使用相对导入吗?当我将我的包移动到我机器上的其他位置(或安装在客户机器上的任何位置)时,这会造成干扰吗?

最佳答案

现代相对导入 ( here's a reference ) 是相对于包且特定于包的,因此只要包的内部结构没有改变,您就可以将包作为一个整体移动到任何您想要的地方。

同时 Joran Beasley's answer应该也能正常工作(尽管在那些不是默认绝对导入的旧版本的 Python 中似乎没有必要,因为旧的导入方式首先在包的目录中检查),我个人不太喜欢修改导入路径当你不需要时,尤其是当你需要加载你的模块或包现在隐藏的一些其他包或模块时。

然而,警告:这些确实需要将有问题的模块作为包的一部分加载,或者至少将它们的 __name__ 设置为指示包中的位置。当 __name__ == '__main__' 时,相对导入对模块不起作用,因此如果您正在编写一个简单/随意的脚本,该脚本利用与其位于同一目录中的另一个模块(并且想要确保脚本将引用正确的目录,如果当前工作目录未设置为脚本的目录,事情将无法正常工作),您可以执行类似 import os, sys; 的操作。 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))(感谢 https://stackoverflow.com/a/1432949/138772 的想法)。如 S.Lott's answer to the same question 中所述,这可能不是您想要专业或作为团队项目的一部分做的事情,但对于您只是做一些琐碎的任务自动化或类似的个人事情应该没问题。

关于Python仅导入包内的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195131/

相关文章:

python import 会导致代码膨胀。我这里想错了吗?

Python 模块组织使 import 语句更清晰

Python 3 "Sideways"相对导入

python - Django 项目中应用程序范围的 utils 文件的位置

python - 如何从 Matlab 正确调用 GEKKO

python - 获取 Tkinter 条目小部件的内容

python - 查找符号的小写(移位)形式

python - 打印 "EXTERNSHEET(b7-):" Pandas

python - 在 Ubuntu 18.04 上安装 CNTK for Python 3.6

python - 第 10 亿次相对进口