私は新しい機械学習プロジェクトのためにRからPythonに切り替えています。機械学習のためのPythonインポート
私はコードのDRYを維持したい場合、私は問題ありません。
したがって、基本的に、私は、異なるモジュール(src
モジュールの下に位置すなわちdata
、features
及びmodel
S)を横切って共有したいコードの一部(機能)を有します。 このコードには、データの読み込みと保存のための関数が含まれています。
問題は、私は、上のモジュールから、私はすべてのモジュール(data
、features
、models
)内の別のfunctions.py
を追加することができ
(functions.py
直接フォルダsrc
の下で私が持っていた場合など)の機能をインポートすることはできませんが、それが台無しにしてしまうということです私の目的は、うまく構造化されたプロジェクトを作成しようとしています。
私はこの問題の唯一の人ではないと思います。
通常どのように処理されますか?
最も深くネストされたモジュールで使用できる共有モジュールを作成するにはどうすればよいですか? (私はmake_dataset.py
、build_features.py
、predict_model.py
、train_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
私はvirtualenvを使用してグローバルスペースが汚染されるべきではないことを言及することを忘れてしまった。その場合、これは機能しますか? – veich
はい。これは一時的にのみパスに影響し、実行中の他のPythonプログラムには影響せず、プログラムを閉じると削除されます。 – Maaaaa
正しいですが、ファイルの先頭にこれらの2行を置くと、そのプログラムが実行されるたびにうまくいきます。 – blacksite