Python 不能 运行 包内脚本

Python can't run script inside package

我认为问题是 运行无法导入代码,因为 IntelliCode 识别模块和函数

这是我文件的结构

-a.py
-tests/
      -__init__.py
      -b.py
-pages/
      -__init__.py
      -c.py

这里是c.py

from tests import b


def hello_from_c():
    print('C says hi')

这里是b.py

import pages.c as c

c.hello_from_c()

当我 运行 'python a.py' 在终端中使用 b 或 c 导入它时 运行 没问题。 但是,当我在终端中 运行 c 或 b 作为脚本尝试导入另一个文件时,我得到 'no module named tests' 或 'no module named pages'。即使 IntelliCode 没有显示任何错误。

发生这种情况的原因是什么?

(更新) 运行宁 python -m [packagename].[filename(no .py)] 有效

当您 运行 python a.py 时,python 搜索相对于地址 a.py 所在的模块,在您的示例中是根地址。这就是为什么您可以使用 tests.bpages.c 导入 b.pyc.py,无论导入代码在哪个文件中(无论是 a.pyb.py, 或 c.py).

然而,当你运行b.pyc.py时,python的模块搜索范围是相对于那些文件所在的地址。因此,当你运行b.py,它在tests文件夹里面寻找一个pages文件夹,显然不存在

即使您尝试使用 ..,您也会收到 ValueError: Attempted relative import in non-package。如果你真的想从兄弟目录中的另一个 python 文件导入一些东西,我建议你阅读这个帖子:

How to fix "Attempted relative import in non-package" even with __init__.py