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 に答える