2016-11-05 26 views
1

私は新しい機械学習プロジェクトのためにRからPythonに切り替えています。機械学習のためのPythonインポート

私はコードのDRYを維持したい場合、私は問題ありません。

enter image description here

したがって、基本的に、私は、異なるモジュール(srcモジュールの下に位置すなわちdatafeatures及びmodel S)を横切って共有したいコードの一部(機能)を有します。 このコードには、データの読み込みと保存のための関数が含まれています。

問題は、私は、上のモジュールから、私はすべてのモジュール(datafeaturesmodels)内の別のfunctions.pyを追加することができ

functions.py直接フォルダsrcの下で私が持っていた場合など)の機能をインポートすることはできませんが、それが台無しにしてしまうということです私の目的は、うまく構造化されたプロジェクトを作成しようとしています。

私はこの問題の唯一の人ではないと思います。

通常どのように処理されますか?

最も深くネストされたモジュールで使用できる共有モジュールを作成するにはどうすればよいですか? (私はmake_dataset.pybuild_features.pypredict_model.pytrain_model.pyに同一のモジュールをインポートしたいのですが)

EDIT:

また、私はvirtualenvのとグローバル空間を汚染すべきではありません使用言及するのを忘れていました。

SOLUTION:あなたがメインパッケージから何かまたはサブパッケージにそれを使用するたびにそう import sys, os fullPathToProjectFolder = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, fullPathToProjectFolder) print('__init__ project packege linked: ' + fullPathToProjectFolder)

だから私がやってしまったことは、私は私のトップパッケージ__init__.pyファイルに次のコードを追加しました。自動的にリンクされます(メインパッケージをインポートすると__init__.pyファイルが自動的に呼び出されるためです)。そして、すべてのモジュールはトップパッケージとの相対的なインポートを可能にします。

例えば:あなたはPythonがモジュールを見つけることができるように、システムパスにプロジェクトを追加する必要が

from features import build_features

答えて

1

train_model.pybuild_features.pyをインポートしたい場合はそのようにそれを行うだろう。

これは、Python内で実行することができます。

​​

次にあなたがあなたのディレクトリに__init__.pyファイルを作成する必要が

import general_functions 
+0

私はvirtualenvを使用してグローバルスペースが汚染されるべきではないことを言及することを忘れてしまった。その場合、これは機能しますか? – veich

+0

はい。これは一時的にのみパスに影響し、実行中の他のPythonプログラムには影響せず、プログラムを閉じると削除されます。 – Maaaaa

+1

正しいですが、ファイルの先頭にこれらの2行を置くと、そのプログラムが実行されるたびにうまくいきます。 – blacksite

0

であなたのモジュールを呼び出すことができますあなたがモジュールとしてなるだろう。したがって、functions.pyまたはimportで電話をかけることができるフォルダにあるものはすべてです。私はそれがうまくいくことを願っていますhttps://docs.python.org/3/tutorial/modules.html#packages