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.b
和 pages.c
导入 b.py
和 c.py
,无论导入代码在哪个文件中(无论是 a.py
、b.py
, 或 c.py
).
然而,当你运行b.py
或c.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
我认为问题是 运行无法导入代码,因为 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.b
和 pages.c
导入 b.py
和 c.py
,无论导入代码在哪个文件中(无论是 a.py
、b.py
, 或 c.py
).
然而,当你运行b.py
或c.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