82

私はPythonが初めてで、ミニプロジェクトを開始していますが、「Python Way」でフォルダーを整理する方法に疑問があります。

私はPyDev開発環境で使用しています。新しいプロジェクトを作成すると、フォルダーが作成されますsrc

+ src

これで、 でPyDev作成Pydev ModuleしてPyDev Package

次の方法でプロジェクトを整理する必要があります。

+ Indicators
    - Moving_averages.py
    - Stochastics.py
+ Strategies
    - Moving_averages_cross.py
- example.py

これをモジュールとパッケージの観点からどのように整理できますか? モジュールとパッケージの意味は何ですか?

4

8 に答える 8

51

パッケージは基本的に、その__init__.py下にファイルを含むフォルダーであり、通常はモジュールが*.pyファイルであるいくつかのモジュールです。主に関係していimportます。Indicatorsに追加する__init__.pyと、次を使用できます。

from Indicators.Stochastics import *

また

from Indicators import Stochastics

ところで、モジュール/パッケージ名は小文字にしておくことをお勧めします。機能には影響しませんが、より「pythonic」です。

于 2011-03-01T13:40:27.190 に答える
41

ファイル システムの観点から見ると、モジュールは で終わるファイルで.pyあり、パッケージはモジュールと (ネストされた) パッケージを含むフォルダーです。ファイルが含まれている場合、Python はフォルダーをパッケージとして認識し__init__.pyます。

そのようなファイル構造

some/
    __init__.py
    foofoo.py
    thing/
        __init__.py
        barbar.py

は、モジュールを持つパッケージと、再びsomeモジュールfoofooを持つネストされたパッケージを定義します。ただし、パッケージとモジュールを使用する場合、これら 2 つのタイプを実際には区別しません。thingbarbar

import some

some.dothis() # dothis is defined in 'some/__init__.py'

import some.foofoo # <- module
import some.thing # <- package

パッケージ/モジュールの命名を選択するときは、 PEP8に従ってください(つまり、小文字の名前を使用します)。

于 2011-03-01T13:49:35.437 に答える
28

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

メイクファイル

    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
于 2013-01-23T04:06:57.357 に答える
8

プロジェクトの構造を決定する前に、プロジェクトの目的を自問することをお勧めします。これは 1 回限りの分析になるのでしょうか。調査したいおもちゃのコンセプトはありますか? 配布する予定の本格的なプロジェクトですか? プロジェクトの構造化に費やす労力は異なります。

  • 1 回限りの分析であれば、ipython ノートブックを使用するのが好きです。ノートブックは思考の流れを捉え、後で参照できるようにコードにマークアップでメモを追加できます。
  • 調査したいのがおもちゃの概念である場合は、最も効果的なシンプルで迅速なアプローチを見つけます。コンセプトをすばやく実装して、それが実現可能であるかどうか、さらに時間を費やす価値があるかどうかを確認したいと考えています。Python の哲学の一部は、「完璧を求めないでください。「十分」であることが多いからです。いつでも後で戻ってきて、ソフトウェア エンジニアリングのベスト プラクティスに従った方法でプロジェクトを構成できます。
  • 後で配布できるようにプロジェクトを構成し、多くのモジュールに拡張できるようにする場合は、次の構成をお勧めします。

    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) するのに役立つすべてのツールがあります。

于 2015-09-28T17:42:46.197 に答える
4

パッケージは、その中に含まれるディレクトリ__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 テスト ランナーを使用してテストを実行します。

それが私のやり方です。:-)

于 2011-03-01T13:57:02.730 に答える
3

試してくださいpython_boilerplate_template

https://pypi.python.org/pypi/python_boilerplate_template

于 2014-03-18T09:56:10.313 に答える