私はここに似たような質問がたくさんあることを知っていますが、自分のプロジェクトに最も適しているのはわかりませんでした。以来(ルートディレクトリのMakefileには、その後data_management
(生データを準備する)とanalysis
、またはそれぞれそのサブディレクトリに座って、いくつかのスクリプトを実行し中小規模のデータサイエンスプロジェクトで絶対パスを使用したインポート
project-name/
docs/
src/
__init__.py
config.yml
Makefile
data/
data_management/
__init__.py
process1.py
process2/
analysis/
__init__.py
analysis1.py
analysis2/
library/
__init__.py
config.py
:これは、次の方法で編成小さなデータ研究プロジェクトでありますいくつかのプロセスは時にはかなり広範囲です)。
これらのモジュールのそれぞれは自己完結型ですが、それは両方とも、関数/クラスをlibrary
ディレクトリからインポートしています(私は自己完結型モジュールの原則に違反するのは避けなければなりませんが、 functinosをコピーすることなくそれを解決する方法)。一つの例は、問題(データベース情報を管理し、関連するサブディレクトリ、別のユーザーの仕様などへのパス)config.py
の私のコンフィギュレーションクラス
です:私はこれらのスクリプトのそれぞれで絶対インポートパスを持っていることができれば、私は最高のそれを見つけますつまり、プロジェクトのどこにでもimport library.config
と書くことができたらしかし、それはこの上またはその他のスクリプト(私の「パス管理システム」にアクセスするためには、私はパスを指定の問題に遭遇しているため)で
# project-name/src/data_management/process1/data_to_sql.py
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
import library.config
config = library.config.Configuration()
を持つことが間違って感じています。
質問:どのファイルでsys.path.insert
をしなくてもいいですか? PYTHONPATH
を編集しないでください。そうでなければ、どうすればmakefileでこの設定を自動化できますか?(最終的に、このコードを他の人と共有したいからです)
ありがとうございます。
編集:私はPython 2.7.11を使用します。
冗長性はありますが、たとえば、必要な情報がすべて指定されていることを保証するために、いくつかの「整合性チェック」が必要なため、クラスを作成します。 – Jhonny
config.pyでConfigurationクラスを作成する場合は、 "src.config import Configuration"から作業する必要があります。しかし、私は "src"の名前をプロジェクトに関連するものに変更することをお勧めします。プロジェクト名をもう一度使用します。それはあなたの輸入をより明確にし、あまり曖昧さをなくします。また、Nils Wernerのガイドラインに従い、setup.pyを作成することをお勧めします。 https://docs.python.org/2/distutils/setupscript.html –