以下控制台输出解释了问题
$ ls -r *
b:
y.py __init__.py
a:
x.pyc x.py __init__.pyc __init__.py
L-IDC42NDV7M-M:pytest rohit$ python
>>> import a.x as xx
>>> print xx.v
1
$ python b/y.py
Traceback (most recent call last):
File "b/y.py", line 1, in <module>
import a.x as xx
ImportError: No module named a.x
如果python查看模块的当前工作目录,不应该'python b / y.py'找到/ x.py?
在Java中,可以导入兄弟模块。我正在寻找一些东西 类似于python。
有什么想法吗?
答案 0 :(得分:3)
Python不搜索当前目录(.
)。但它会搜索包含输入脚本(./b
)的目录。请参阅The Module Search Path。
如果您想要搜索当前目录,可以使用PYTHONPATH=.
PYTHONPATH=. python b/y.py
或使用-m
option:
python -m b.y
答案 1 :(得分:0)
主程序的目录会自动添加到Python路径中。主程序的模块名称为__main__
,而不是b.y
您可以编写一个位于a和b的父目录中的简单主程序,也可以将该父目录添加到PYTHONPATH。
如果您调用python very/long/path/to/the/main/program.py
,则并不意味着当前目录是深命名空间的根目录。我认为,在Java中,命名空间中的主程序相对较深,因此一切都不同。