如何处理Python模块名称冲突?能否在单文件导入同名模块?
能否同时导入同名的第三方模块和自定义模块?
完全可以实现,你给出的示例代码本身就是可行的写法。
原因很简单:Python的模块导入是靠完整路径区分命名空间的。你导入的第三方模块是顶级的somemodule,而自定义模块是嵌套在userdefined包下的子模块,两者的命名空间完全独立,不会互相覆盖或冲突。
实际运行时:
import somemodule会加载PyPI安装的那个顶级模块,调用somemodule.run()就是执行第三方模块里的方法;from userdefined.somemodule import somefunc则是从你的自定义包中指定子模块导入函数,直接调用somefunc()即可使用自定义逻辑。
如果担心搞混,还可以打印模块的文件路径验证:
import somemodule from userdefined.somemodule import somefunc import userdefined.somemodule # 打印第三方模块的安装路径 print(somemodule.__file__) # 打印自定义模块的本地路径 print(userdefined.somemodule.__file__)
要是你把自定义模块也做成顶级的somemodule(和第三方模块同名且在同一层级),才会因为Python的导入路径优先级(先找当前工作目录,再找site-packages)出现覆盖问题,但你的场景里自定义模块放在子包下,完全不用担心这个问题。
内容的提问来源于stack exchange,提问作者fhcat
相关产品推荐
相关产品推荐

