Python 相同的模块名称约定

Python Same Module Name Convention

参考这个问题:
python: Two modules and classes with the same name under different packages

一个包中的所有模块是否都应该唯一命名,而不考虑嵌套? PEP8 和 PEP423 似乎没有解决这个问题。

不,没有要求不同级别的名称必须不同。每个级别都是一个单独的命名空间。如果 foo.utilsfoo.bar.utils 在您的项目中有意义,就这样做。

例如,Python标准库有email.message and email.mime.message, and multiprocessing.connection, as well as multiprocessing.dummy.connection,还有很多:

$ ls ~/Development/Library/cpython/Lib/**/*.py  | grep -v __ | grep -v test_ | xargs basename | sort | uniq -c | grep -v '  1 ' | sort
   2 abc.py
   2 ascii.py
   2 client.py
   2 connection.py
   2 constants.py
   2 dump.py
   2 errors.py
   2 filelist.py
   2 handlers.py
   2 log.py
   2 message.py
   2 parse.py
   2 parser.py
   2 process.py
   2 queues.py
   2 server.py
   2 spawn.py
   2 text.py
   2 tree.py
   3 main.py
   4 config.py
   5 support.py
   6 util.py

这是出现在包内的所有模块,出现不止一次,不包括测试,__init__.py__main__.py

由于包是基于文件系统的,在正常情况下,你不能有相同的包,因为files/directories没有重复包。

当然,您可以拥有相同的命名空间包。

也可以在不同的路径中使用相同的 package/module 名称。他们是按顺序搜索的,所以先赢。