处理模块名称冲突

时间:2016-10-24 04:10:39

标签: python python-3.x python-import

有时,应用程序与第三方软件包中的内部文件之间会发生模块名称冲突。例如,当前文件夹中名为profile.py的文件会导致jupyter notebook在尝试导入而不是自己的profile.py时崩溃。从包用户的角度来看,避免这个问题的好方法是什么? (或者这是包开发人员应该以某种方式阻止的东西吗?)

注意:虽然由于应用程序和内置名称(例如time.pysocket.py)之间的冲突而发生类似问题,但至少记住标准库模块的名称相对容易和其他内置对象。

1 个答案:

答案 0 :(得分:2)

当前目录是包含应用程序主脚本的目录。如果要避免在此目录中发生名称冲突,请不要在其中放入任何模块。

相反,请使用命名空间。在主脚本的目录中创建一个具有唯一名称的包,并从中导入所有内容。主脚本应该非常简单,并且只包含以下内容:

if __name__ == '__main__':

    from mypackage import myapp

    myapp.run()

包中的所有模块也应使用from导入来访问包中的其他模块。例如,myapp.py可能包含:

from mypackage import profile