2016-09-08 8 views
2

私は以下の構造を持っています: utils_dirには3つのdefを持つgenerator.pyファイルがあります。別のフォルダの別の.pyからdefを呼び出す方法

私はinline_dirにtest.pyを持っています。私はtest.pyのgenerator.pyのdefを使用しようとしています。

inline_dirとutils_dirは異なるフォルダにあります。 defを使用するにはどうしたらいいですか?

_init_.pyを作成してから、import generatorを呼び出してみます。 - 働かない。 はfrom utils import generatorをしようとしました - あなたはサブディレクトリ内の.pyファイルを実行しようとしているようですね

Dir structure

Support_dir ├── dir_A │ ├── dir_aa │ └──----- main.py [Want to use a and b from generator.py] └── utils | └── generator.py | |___ def a |___ def b

答えて

1

を働いていません。

次のディレクトリ構造を仮定:

from utils.generator import a 

if __name__ == '__main__': 
    a() 

そしてgenerator.pyは次のようになります:(generator.pyで定義されている機能a())のような単純なインポートを含む

. 
├── inline 
│   ├── __init__.py 
│   └── main.py 
└── utils 
    ├── __init__.py 
    └── generator.py 

そして、あなたのmain.py

def a(): 
    print "hi there" 

これはあなたのプロジェクト・レベルからインポート中のサブディレクトリ内のファイルを実行したい場合は、あなたができるinline/

にモジュール検索パスを設定しますので、あなたがpython inline/main.pyを使用してプログラムを実行することができなくなります次

PYTHONPATH=. python inline/main.py 

UPDATE:追加の例generator.py

+0

私はgenerator.pyファイルからdefを使用しようとしています。私が上に試してみましょう –

+0

上記の '' 'generator.py''の関数定義を追加しました – Jann

+0

ディレクトリ構造を更新しました。 –

1

これは、Pythonパスの問題の一種です。インポートすると、Pythonは現在のディレクトリとデフォルトのシステムパスディレクトリを検索します。 utils_dirは現在の作業ディレクトリ(インポート時にはinline_dirで作業する)でもデフォルトのpython検索システムパスでもないので、インポートが機能しません。

解決する簡単な方法は、

a)です。最初にutils_dirをpythonパッケージにしてください。init .pyをディレクトリに追加するだけです。

b)。次に、PYTHONPATH環境変数にutils_dirの親フォルダのパスを追加します。

export PYTHONPATH=/home/user/parent_of_utils_dir:$PYTHONPATH 

この行を.bashrcに追加して、常に利用できるようにすることができます。

c)。あなたのテストで。PY、より多くのPythonの開発方法はsetuptoolsのを使用し、依存関係の問題を解決するPythonスクリプトのsetup.pyを書くことで機能

from utils import generator 

または

import utils.generator 

をインポートします。そして、使用することができます

python setup.py develop 

開発モードで使用することができます。

https://packaging.python.org/

チェック以上のpythonパッケージ開発ガイドでは、これはあなたを助けることを願っています。

関連する問題