有时,应用程序与第三方软件包中的内部文件之间会发生模块名称冲突。例如,当前文件夹中名为profile.py
的文件会导致jupyter notebook
在尝试导入而不是自己的profile.py
时崩溃。从包用户的角度来看,避免这个问题的好方法是什么? (或者这是包开发人员应该以某种方式阻止的东西吗?)
注意:虽然由于应用程序和内置名称(例如time.py
或socket.py
)之间的冲突而发生类似问题,但至少记住标准库模块的名称相对容易和其他内置对象。
答案 0 :(得分:2)
当前目录是包含应用程序主脚本的目录。如果要避免在此目录中发生名称冲突,请不要在其中放入任何模块。
相反,请使用命名空间。在主脚本的目录中创建一个具有唯一名称的包,并从中导入所有内容。主脚本应该非常简单,并且只包含以下内容:
if __name__ == '__main__':
from mypackage import myapp
myapp.run()
包中的所有模块也应使用from
导入来访问包中的其他模块。例如,myapp.py
可能包含:
from mypackage import profile