处理模块名称冲突

max*_*max 5 python python-import python-3.x

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

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

ekh*_*oro 2

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

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

if __name__ == '__main__':

    from mypackage import myapp

    myapp.run()
Run Code Online (Sandbox Code Playgroud)

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

from mypackage import profile
Run Code Online (Sandbox Code Playgroud)