Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3中的相对导入失败_Python - Fatal编程技术网

Python 3中的相对导入失败

Python 3中的相对导入失败,python,Python,考虑以下示例包: example/ ├── bar.py ├── foo.py └── __init__.py foo.py只包含一行代码:from。导入条码 如果我从示例包根中执行python foo.py,我会得到: SystemError:父模块“”未加载,无法执行相对导入 我做错了什么?当您运行python foo.py时,foo.py不是示例模块的一部分。创建\uuuu main\uuuu.py以运行foo.py的相关部分(通常不应在顶层运行任何代码),切换到父目录,然后尝试pyth

考虑以下示例包:

example/
├── bar.py
├── foo.py
└── __init__.py
foo.py
只包含一行代码:
from。导入条码

如果我从
示例
包根中执行
python foo.py
,我会得到:

SystemError:父模块“”未加载,无法执行相对导入


我做错了什么?

当您运行
python foo.py
时,
foo.py
不是
示例
模块的一部分。创建
\uuuu main\uuuu.py
以运行
foo.py
的相关部分(通常不应在顶层运行任何代码),切换到父目录,然后尝试
python-m example

例如,
foo.py

def hello():
    print('Hello, world!')
from . import foo

foo.hello()
\uuuu main\uuuuu.py

def hello():
    print('Hello, world!')
from . import foo

foo.hello()

谢谢这似乎是可行的,你能解释一下你的评论吗“一般来说,它不应该在顶层运行任何代码”?您指的是
foo.py
,您的意思是
foo.py
模块在刚导入时不应该运行任何代码吗?@DunPeal:是的,没错。更具体地说:当您以
python a/b/c.py
的形式运行文件时,python会将
a/b//code>添加到
sys.path
。永远不要运行任何文件名应该是模块层次结构一部分的东西。始终位于父目录中,并使用
-m
运行它。(如果您真的想,也可以在这里使用
-m example.foo