2

以下控制台输出解释了该问题

$ 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' 找到 a/x.py 吗?

在 Java 中可以导入同级模块。我在 python 中寻找类似的东西。

有任何想法吗?

4

2 回答 2

3

Python 不搜索当前目录 ( .)。但它会搜索包含输入脚本 ( ./b) 的目录。请参阅模块搜索路径

如果要搜索当前目录,可以使用PYTHONPATH=.

PYTHONPATH=. python b/y.py 

或使用-m选项

python -m b.y
于 2013-11-10T09:05:01.947 回答
0

主程序的目录会自动添加到 Python 路径中。主程序的模块名是__main__,不是b.y

您可以在 a 和 b 的父目录中编写一个简单的主程序,也可以将该父目录添加到 PYTHONPATH。

如果调用python very/long/path/to/the/main/program.py它并不意味着当前目录是深层命名空间的根目录。我认为,在 Java 中,主程序在命名空间中相对较深,因此一切都不同。

于 2013-11-10T10:20:43.637 回答