"site" 不是包

"site" is not a package

我有这个目录结构:

my_project/
    site/
        __init__.py
        app.py
    main.py

main.py 包含这个:

import site.app
print('Success')

得到这个错误:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    import site.app
ImportError: No module named 'site.app'; 'site' is not a package

将 "site" 重命名为任何其他名称,这可以正常工作。示例:

$ mv site/ foo/
$ echo -e "import foo.app\nprint('Success')" > main.py
$ python main.py
Success
$

"site"是一个特殊的包名吗?为什么?我该如何解决?

site 是一个 standard library module。绕过它的方法是不要给你的包命名,就像你不会将它命名为 mathsysitertools 一样。如果你想让my_project成为一个包,让它成为一个包,通过给它一个__init__.py来让它成为一个包。您不想创建名为 site.

的顶级包