Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Python3-ImportError:无法导入名称_Python_Python 3.x_Import - Fatal编程技术网

Python3-ImportError:无法导入名称

Python3-ImportError:无法导入名称,python,python-3.x,import,Python,Python 3.x,Import,我有一个文件夹: python_scripts/test_import/ |-- __init__.py |-- m1.py `-- m2.py m1.py的内容: a=3 from . import m1 print(m1.a) m2.py的内容: a=3 from . import m1 print(m1.a) 当我尝试执行m2.py时,出现以下错误: # python3 python_scripts/test_import/m2.py Traceback (most rece

我有一个文件夹:

python_scripts/test_import/
|-- __init__.py
|-- m1.py
`-- m2.py
m1.py的内容

a=3
from . import m1

print(m1.a)
m2.py的内容

a=3
from . import m1

print(m1.a)
当我尝试执行
m2.py
时,出现以下错误:

# python3 python_scripts/test_import/m2.py
Traceback (most recent call last):
  File "python_scripts/test_import/m2.py", line 1, in <module>
    from . import m1
ImportError: cannot import name 'm1'
然后我看不到任何错误,预计执行结果如下:

3
问题:
为什么点的相对导入在这里不起作用?

错误:无法导入名称m1 相对导入使用导入文件的name属性来确定文件在整个包结构中的位置,但是当直接运行python脚本时,模块的name被设置为main,而不是模块的原始名称。这样,就无法识别相对路径。 因此,您不能直接使用main.py,您的main.py必须位于最上面的文件中

python_scripts/     
  |-- main.py :from test_import.m import m2
    /test_import/
      _init_.py
      /m/
        |-- __init__.py
        |-- m1.py
        |-- m2.py

或者,如果您坚持这样做,您必须更改为from.m1 import*

当您在m2中时,您位于python脚本的test\u import文件夹中。因此,您必须向上两个级别查找m1.py,因为它与python_脚本处于同一级别。向上一级表示与测试_导入的级别相同,这是不正确的。@IrfaanJamarussadiq m1.py和m2.py都位于同一级别,它们位于测试_导入中。顺便说一句,约翰塞特罗给出了一个明确的回答。别忘了给我一些小费,我现在正在为他们赚钱。谢谢,你的回答澄清了一切。事实上,对我来说,从上面的任意文件级别导入模块就足够了。我似乎对如何正确处理模块有了更好的理解。