私はPythonが初めてで、ミニプロジェクトを始めていますが、「Pythonの方法」でフォルダを整理する方法に疑問があります。
開発環境でPyDev
を使用しています。新しいプロジェクトを作成すると、src
というフォルダーが作成されます
+ src
これで、PyDev
で、Pydev Module
およびPyDev Package
次の方法でプロジェクトを整理する必要があります。
+ Indicators
- Moving_averages.py
- Stochastics.py
+ Strategies
- Moving_averages_cross.py
- example.py
これをモジュールとパッケージに関して整理するにはどうすればよいですか?モジュールとパッケージの意味は何ですか?
宜しくお願いします、
パッケージは基本的に、その下に__init__.py
ファイルと通常はいくつかのモジュールを持つフォルダーです。ここで、モジュールは*.py
ファイルです。主にimport
と関係があります。 __init__.py
をインディケーターに追加すると、使用できます:
from Indicators.Stochastics import *
または
from Indicators import Stochastics
ところで、モジュール/パッケージ名は小文字のままにすることをお勧めします。機能には影響しませんが、より「Python的」です。
ファイルシステムの観点から見ると、module
は.py
で終わるファイルであり、package
はmodule
sと(ネストされた)package
sを含むフォルダーです。 Pythonは、__init__.py
ファイルが含まれている場合、フォルダーをpackage
として認識します。
そのようなファイル構造
some/
__init__.py
foofoo.py
thing/
__init__.py
barbar.py
package
some
を定義します。これにはmodule
foofoo
があり、ネストされたパッケージthing
にはモジュールbarbar
があります。ただし、パッケージとモジュールを使用する場合、これらの2つのタイプを実際に区別しません。
import some
some.dothis() # dothis is defined in 'some/__init__.py'
import some.foofoo # <- module
import some.thing # <- package
パッケージ/モジュールの命名を選択する場合は、 PEP8 に従ってください(つまり、小文字の名前を使用します)。
python-package-template を参照してください
ディレクトリ構造
.
|-- bin
| `-- my_program
|-- docs
| `-- doc.txt
|-- my_program
| |-- data
| | `-- some_data.html
| |-- __init__.py
| |-- submodule
| | `-- __init__.py
| |-- helpers.py
|-- tests
| |-- __init__.py
| |-- test_helpers.py
|-- Makefile
|-- CHANGES.txt
|-- LICENSE.txt
|-- README.md
|-- requirements-dev.txt
|-- requirements.txt
`-- setup.py
catMakefile
PYTHON=`which python`
NAME=`python setup.py --name`
all: check test source deb
init:
pip install -r requirements.txt --use-mirrors
dist: source deb
source:
$(PYTHON) setup.py sdist
deb:
$(PYTHON) setup.py --command-packages=stdeb.command bdist_deb
rpm:
$(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall
test:
unit2 discover -s tests -t .
python -mpytest weasyprint
check:
find . -name \*.py | grep -v "^test_" | xargs pylint --errors-only --reports=n
# pep8
# pyntch
# pyflakes
# pychecker
# pymetrics
clean:
$(PYTHON) setup.py clean
rm -rf build/ MANIFEST dist build my_program.Egg-info deb_dist
find . -name '*.pyc' -delete
Modern-package-templateライブラリをチェックアウトすることをお勧めします。これは、いくつかの質問を順を追って説明し、かなり簡単に配布できるものを手に入れようとするプロジェクトに、本当にすてきな基本レイアウトをセットアップする方法を提供します。
プロジェクト構造を決定する前に、プロジェクトの目的が何であるかを自問するのは良いことです。これは1回限りの分析になりますか?調べたいおもちゃのコンセプトは?配布する予定の本格的なプロジェクトですか?プロジェクトの構造化に費やす労力は異なります。
後で配布できるようにプロジェクトを構造化し、多くのモジュールに拡張できるようにする場合は、次の構造をお勧めします。
projectname
├── MANIFEST.in
├── setup.py
├── README
├── .gitignore
├── .git
├── projectname_env
└── projectname
├── __init__.py
├── subpackageone
│ ├── __init__.py
│ ├── second_module.py
│ ├── tests
│ │ └── test_second_module.py
│ └── models
│ └── model1
├── first_module.py
└── tests
└── test_second_module.py
私がこの構造が好きな詳細な理由 私のブログ投稿にあります 、しかし基本的な要点は、階層的に低いレベルのprojectname
ディレクトリが実際のプロジェクトを含んでいることです。それに加えて、それを管理(git)およびパッケージ化(setup.py、MANIFEST.in)するのに役立つすべてのツールがあります。
パッケージは、__init__.py
が含まれるディレクトリです。ディレクトリとの違いは、ディレクトリをインポートできることです。
「Pythonの方法」自体はありませんが、プロジェクトに関連する名前を持つすべてのモジュールを1つのパッケージに入れることをお勧めします。
また、Pythonスタイルガイド、PEP8、パッケージ名とモジュール名はすべて小文字である必要があります。プロジェクトが「Botond Statistics」と呼ばれる場合、構造は次のようになります。 :
botondstats/
indicators/
moving_averages.py
stochastics.py
strategies/
moving_averages_cross.py
example.py
次に、次のようにしてStochasticsクラスを見つけます。
from botondstats.indicators.stochastics.Stochastics
(構造を維持するがインポートを短くするさまざまな方法がありますが、それは別の質問です)。
必要に応じて、この構造をsrc/
の下に配置できますが、必須ではありません。私は決してしません。代わりに、メインディレクトリがあります。
BotondStatistics/
docs/
botonstats/ # the above structure
setup.py # Distutils/distribute configuration for packaging.
このディレクトリには、通常virtualenvもあるため、実際にはbin/lib /などもあります。通常、開発は次を実行して行います。
./bin/python setup.py tests
Distrubuteテストランナーを使用してテストを実行します。
それが私のやり方です。 :-)
python_boilerplate_template
:
cookiecutter
による audreyr
プロジェクトには、いくつかのPythonプロジェクトテンプレート:
このパッケージは、単一の~/.cookiecutterrc
ファイルを使用して、Python、Java、JS、およびその他の言語でカスタムプロジェクトテンプレートを作成します。
たとえば、Python PyPI
と互換性のあるテンプレート: