2017-12-27 12 views
1

マイフォルダツリー:pythonのコマンドパスではなく、実行ファイルに相対パスを使って他のファイルをインポートするには?

./ 
├── README.MD 
├── basic 
│ └── thresh.py 
├── images 
│ └── figure.jpg 
└── utils 
    ├── util.py 
    └── util.pyc 

私はthresh.pyutil.pyをインポートする:

import sys 
sys.path.append('../utils') 
import util 

私はbasicフォルダ内のコマンド$ python thresh.pyを実行すると、それはオールライトです。しかし、最上位のフォルダに$ python ./basic/thresh.pyを実行して、私はエラーを取得します:

ImportError: No module named util

かかわらず、Pythonコマンド・パスの実行ファイルへのファイルの相対パス指定したことにより、ファイルをインポートする$ python ./basic/thresh.py$ python thresh.py仕事の両方を作るために、どのように?

答えて

1

あなたは、例えば、あなたが(そこも__file__を使用して、他の変種がありますが、これは動作するはずです)

import os 
wk_dir = os.path.dirname(os.path.realpath('__file__')) 
print(wk_dir) 

で実行しているスクリプトの絶対パスを取得し、それを使用してディレクトリを取得することができます

import sys 
sys.path.append(wk_dir+'/../utils') 

PS:あなたは__file__代わりの'__file__'を使用する必要があります。

+0

この作品は、しかし、あなたのコードで '' __file____''から '__file__''に変更する必要があります。 – tomfriwel

+0

@tomfriwel - 投稿されたコードがテストされ、動作します。私はそれが他のものも見つけました。あなたが提案した変更は私のためには機能しませんが、他の投稿も同様に使用しています。私はこれを詳細に調査しませんでしたが、重要な点は、1)あなたの問題を解決したこと、2)両方を試みる必要があるかもしれないことを他の人が知っていることです。 –

+0

多分、私たちは異なるバージョンのPythonを使用します。 – tomfriwel

関連する問題