web-dev-qa-db-ja.com

3つのサブプログラムで構成されるプログラムを適切に構成する方法

私は3つのプログラムで構成されたシステムを構築しています。それらをA、B、Cと呼びます。今、私のファイル構造は災害だと思います。

ルートフォルダー内には、プログラムを実行する.batファイルへのショートカットと、programs_dataと呼ばれるフォルダーがあります。そのフォルダー内には、4つの別個のフォルダーがあり、各プログラムに1つと共通フォルダーがあります。問題は、共通フォルダーからインポートできるようにするには、各プログラムとそれらのプログラムのサブスクリプトが必要であり、プログラムAのAPIを呼び出せるようにプログラムCとBが必要なのです。

今のところ、上位レベルから関数をインポートするために、サブファイルのsys.pathに追加するのが面倒です。

このようなものを構造化する正しい方法は何ですか?

現在の構造:

root
├── Configuration.lnk
├── Documentation.lnk
├── Program A.lnk
├── Program B.lnk
├── Program C.lnk
├── programs_data
│   ├── Program A
│   │   ├── Program A API.py
│   │   ├── Program A.bat
│   │   ├── Program A.py
│   │   ├── src
│   │   │   ├── server.py
│   │   │   ├── test_functions.py
│   │   │   └── validation.py
│   │   └── targets
│   │       ├── sql_querys
│   │       │   ├── query1.sql
│   │       │   ├── query2.sql
│   │       │   └── queryn.sql
│   │       ├── target1.py
│   │       ├── target2.py
│   │       ├── target3.py
│   │       └── targetn.py
│   ├── Program B
│   │   ├── Program B.bat
│   │   ├── Program B.py
│   │   ├── classifiers
│   │   │   ├── classifier1.py
│   │   │   ├── classifier2.py
│   │   │   └── classifiern.py
│   │   ├── events.log
│   │   ├── o365_token.txt
│   │   └── src
│   │       ├── batchECImport.py
│   │       ├── classifier.py
│   │       └── logger.py
│   ├── Program C
│   │   ├── Program C.bat
│   │   ├── Program C.py
│   │   ├── Reports
│   │   │   ├── report 1
│   │   │   │   └── report.py
│   │   │   └── report 2
│   │   │       └── report.py
│   │   ├── o365_token.txt
│   │   ├── schedule.xlsx
│   │   └── src
│   │       └── report.py
│   └── common
│       ├── APIMailboxManager.py
│       ├── Documentation
│       │   └── Documentation.pdf
│       ├── FlexibleProcess.py
│       ├── config.py
│       ├── misc.py
│       ├── print_functions.py
│       ├── production_support_passwords.py
│       ├── reports_log.db
│       └── reports_log.py
└── schedule spreadsheet.Ink

ありがとう!

5
Nacho

__init__.pyファイルを使用して、各ディレクトリにあるモジュールのインポートパスを設定します。ドキュメント ここ 。これらのファイルでは、commonフォルダーへの相対パスのみを追加する必要があります。コードの重複を避けたい場合は、共通のフォルダーを作成する他の方法はないと思います...

1
totok

ルートフォルダーをPYTHONPATH環境変数( https://www.tutorialspoint.com/What-is-PYTHONPATH-environment-variable-in-Python )に入れて、 sys.pathに追加する必要があります。

そうすれば、このようなコードを簡単に書くことができます

from root.programs_data.src import server

0
borisdonchev