在Python2.7.x中,在包模块中导入是如何工作的?在Python3.x中为什么/如何更改
考虑以下目录结构在Python2.7.x中,在包模块中导入是如何工作的?在Python3.x中为什么/如何更改,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,考虑以下目录结构 driver.py m/__init__.py m/bar.py m/foo.py 包括以下内容 driver.py: import m.foo print("Hello world!") print("I am bar") import bar print("I am foo") m/\uuuu init\uuuu.py:文件为空 m/bar.py: import m.foo print("Hello world!") print("I am bar") impo
driver.py
m/__init__.py
m/bar.py
m/foo.py
包括以下内容
driver.py:
import m.foo
print("Hello world!")
print("I am bar")
import bar
print("I am foo")
m/\uuuu init\uuuu.py:文件为空
m/bar.py:
import m.foo
print("Hello world!")
print("I am bar")
import bar
print("I am foo")
m/foo.py:
import m.foo
print("Hello world!")
print("I am bar")
import bar
print("I am foo")
运行python2-driver.py
有效,运行python3-driver.py
无效(在m/foo.py中ImportError尝试导入bar),这导致我问了几个问题
driver.py
(例如import m.foo
)中导入一个模块,这将在sys.path
列表中搜索属于\uu main\uuu
(在本例中为driver.py
)的模块。然而,尚不清楚的是,当driver.py
导入的模块本身进行导入时会发生什么情况(例如m/foo.py
尝试导入m/bar.py
)。似乎m/foo.py
中的sys.path
与driver.py
中的sys.path
相同,因此我不明白当m/
目录不在sys.path
中时,Python 2.7是如何成功导入条形图的来自。导入条码
而不是
导入栏
在m/foo.py
中,让这个简单的示例在Python-3.x下工作
更新:
这似乎是改变的原因
谢谢。可能重复@jonrsharpe:您链接到的问题基本上回答了我的第二个问题,但不是第一个问题。要回答第一个问题,默认的CPython实现还将在当前工作目录中查找文件以导入文件。这就是为什么文件m/foo.py和m/bar.py可能具有相对导入。