0

Pythonプロジェクトのディレクトリ構造は、スタックオーバーフローの回数(例えばherehereherePythonパッケージの中に繰り返しディレクトリ名があるのはなぜですか?

そして、多くの回答数を尋ねてきたかの質問が与えられています。しかし、これらの答えの中で明確ではないように見えることの1つは、繰り返しプロジェクトのディレクトリがある理由です。この例では、

<root>/ 
|-- Twisted/  
| |-- __init__.py 
| |-- README 
| |-- setup.py 
| |-- twisted/ 
| | |-- __init__.py 
| | |-- main.py 
| | |-- test/ 
| | | |-- __init__.py 
| | | |-- test_main.py 
| | | |-- test_other.py 
| | |-- bin/ 
| | | |-- myprogram 

/Twisted/twisted/main.pyはメインファイル

あるしかし、一方で、あなたはアドバイスlike this持っている:例えば、しばしば引用されるthis articleで、推奨レイアウトはある

多くの開発者は、バンドルされた新しいアプリケーションテンプレートのためにリポジトリを構成していません。

<root>/ 
|-- samplesite/ 
| |-- manage.py 
| |-- samplesite/ 
| | |-- settings.py 
| | |-- wsgi.py 
| | |-- sampleapp/ 
| | |-- models.py 

いけないこれを行います。

繰り返しパスは、ツールと開発者の両方にとって混乱します。不要なネスティングは誰にも役立たない。のは、それを正しくやってみましょう:

<root>/ 
|-- manage.py 
|-- samplesite/ 
| |-- settings.py 
| |-- wsgi.py 
| |-- sampleapp/ 
| |-- models.py 

私の質問は必ずしもないが、それぞれの方法に長所や短所が存在する可能性があるため、「優れている方法はありますか?」。

私の質問は、もっと簡略化された第2のスタイルにすれば、何が失われますか? /<root>/twisted/main.pyではなく、/<root>/Twisted/twisted/main.pyというディレクトリ構造を使用する理由はありますか?何らかの理由で自分のアプリケーションを共有したり、importプロセスをスムーズにすることが容易になりますか?他に何か?

答えて

0

これらの2つのドキュメントは、あなたが考えるよりも近いです。 Interesting Things, Largely Python and Twisted Related(最初の例)とdjango-admin startproject(文書の第2例)は、あなたがプロジェクトリポジトリの外にいると仮定しています。引用するために、「まあ、彼らは裸の新鮮な貯蔵所に行き、以下を実行します...」

Djangoのドキュメントは、あなたが

django-admin.py start-project samplesite 

を実行する場合、プロジェクトのディレクトリとプロジェクトパッケージの両方が命名され、プロジェクトディレクトリは、現在の の作業ディレクトリに

を作成されることを述べますこのコマンドはプロジェクトディレクトリを作成するので、実行時に既に作成済みのプロジェクトディレクトリの内部にはいけません。ドキュメントは、オプションの宛先が提供されている場合、Djangoは今

プロジェクトディレクトリとして、既存の ディレクトリを使用します

django-admin startproject myproject /Users/jezdez/Code/myproject_repo 

を言うために行く、あなたは/Users/jezdez/Code/myproject_repoに存在していたとします。次に、現在のディレクトリにプロジェクトパッケージを作成するには

django-admin startproject myproject . 

を実行します。 Voila、2番目の作者の例があります!作者は、コマンドを実行する前にレポを作成している場合、最初のフォームを避けるように指示していました。

したがって、ディレクトリ構造を再描画できます。最初の例では、<root>は、dev reposを保持しているディレクトリです。 Twistedはあなたのレポのディレクトリです。 (さて、パッケージディレクトリではないので、そのディレクトリには__init__.pyが含まれてはいけません。最後の例では、<root>がrepoディレクトリです。私はそのディレクトリDjangoExampleという名前と仮定すると、その構造は、他の違いについては

<root> 
|-- Twisted/  
| |-- __init__.py 
| |-- README 
| |-- setup.py 
| |-- twisted/ 
| | |-- __init__.py 
| | |-- main.py 
| | |-- test/ 
| | | |-- __init__.py 
| | | |-- test_main.py 
| | | |-- test_other.py 
| | |-- bin/ 
| | | |-- myprogram 
| 
|-- DjangoExample/ 
| |-- manage.py 
| |-- samplesite/ 
| | |-- settings.py 
| | |-- wsgi.py 
| | |-- sampleapp/ 
| | |-- models.py 

なり、Djangoのアプリはtwisedは、より一般的なPythonのパッケージのルールに従うのに対し、Djangoフレームワークのルールに従わなければなりません。

+0

ああ、それは一見矛盾するガイドラインを説明しています。ありがとう! –

2

私は、Pythonのプロジェクトの最も一般的なレイアウトは、このようなものであると信じて:

project/ 
|-- setup.py 
|-- bin/ 
|-- docs/ ... 
|-- examples/ ... 
|-- package/ 
    |-- __init__.py 
    |-- module1.py 
    |-- module2.py 
    |-- subpackage/ ... 
    |-- tests/ ... 

プロジェクトは、プロジェクトの名前で、パッケージは、たとえば、トップレベルのインポートの名前ですscikits-学び、スケートをする。パッケージには、Pythonがインポートできるものがすべてあり、パッケージ名を使用してインポートします。たとえば、from package import thingまたは​​です。このプロジェクトには、パッケージやドキュメント、サンプル、インストールスクリプトなどのサポートするものがあります。プロジェクトはPythonでインポートできないので、通常は__init__.pyがプロジェクトに存在しないことに注意してください。プロジェクトとパッケージが同じ名前を持つことは一般的ですが、必須ではありません。

+0

非常に参考になりました - ありがとうございます。プロジェクトディレクトリとパッケージディレクトリの違いを理解しました。 –

関連する問題