0

Python projesinin dizin yapısı Yığın taşması zamanlarda (örneğin here, here ve here)Neden bazı Python paketlerinde tekrarlanan dizin adları var?

Ve birçok cevapları bir dizi istendi sorusu verilir. Fakat bu cevapların hiçbirinde net olarak görülmeyen bir şey, bazı projelerin tekrarlı dizinlere sahip olmasının nedenidir. Örneğin, sıklıkla gösterilen this article yılında, önerilen düzen geçerli:

:

Bu örnekte
<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 ana dosya

olduğunu Ama sonra diğer taraftan tavsiyeye like this var

Pek çok geliştirici, yeni paketlenmiş uygulama şablonları nedeniyle depolarını zayıf bir şekilde yapılandırıyor.

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

Dont bunu.

Yinelenen yollar hem araçlarınız hem de geliştiricileriniz için kafa karıştırıcıdır. Gereksiz yuvalama kimseye yardım etmez. en düzgün yapalım:

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

sorum ille değil, her yolu artıları veya eksileri olabileceği için "iyi olan yol?". Bunun yerine, daha basitleştirilmiş ikinci stil ile gidersem, ne kaybederim? Sadece /<root>/twisted/main.py yerine /<root>/Twisted/twisted/main.py dizin yapısına sahip olmak için iyi bir neden var mı? Uygulamamı bir şekilde paylaşmayı veya import sürecini daha sorunsuz hale getirmeyi kolaylaştıracak mı? Başka bir şey?

cevap

0

Bu iki belge düşündüğünüzden daha yakın. Interesting Things, Largely Python and Twisted Related (ilk örneğiniz) ve django-admin startproject belgelerinin ikisi de, proje havuzunun dışında olduğunuzu varsayar, Structuring Your Project (ikinci örneğiniz) deponun içinde olduğunuzu varsayar. Alıntı yapmak için, "Eh, onlar çıplak ve taze depolarına gidip aşağıdakileri çalıştırıyorlar ...".

django docs

Eğer

django-admin.py start-project samplesite 

çalıştırırsanız belirtmektedirler hem proje dizini ve proje paketi olarak adlandırılır ve proje dizin dizini

çalışma akımı oluşturulacak Komut, sizin için proje dizini oluşturur, bu nedenle, bunu çalıştırdığınızda zaten oluşturulmuş bir proje dizini içinde olmamalıdır. docs opsiyonel hedef sağlanıyorsa, Django, Şimdi proje dizininde

olarak bu mevcut dizini kullanmak size /Users/jezdez/Code/myproject_repo zaten vardı varsayalım olacak

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

söylemeye devam edin. Sonra geçerli dizinde proje paketini oluşturmak için

. Voila, ikinci yazarın örneğini aldın! Yazar, sadece komutu çalıştırmadan önce repo'unuzu oluşturuyorsanız, ilk formdan kaçınmanızı söylüyordur.

Dizin yapınızı yeniden çizelim. İlk örnekte, <root>, dev reposlarınızı tuttuğunuz dizindir. Twisted, repo'nuzla birlikte dizindir. (Bir kenara göre, bu dizinin bir paket dizini olmadığı için __init__.py olması gerekmez). Son örnekte, <root> repo dizininin kendisidir. Ben o dizini DjangoExample adlı varsayalım, o zaman yapısı diğer farklılıklara gelince

<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 

olurdu, Django uygulaması twised daha genel piton paket kurallarını takip oysa Django çerçeve kurallarına uymak zorundadır.

+0

Ah, görünüşte çelişen kuralları açıklıyor. Teşekkürler! –

2

Ben piton projelerinin en yaygın düzen böyle bir şey olduğuna inanıyorum:

proje projenin adı ve pakettir
project/ 
|-- setup.py 
|-- bin/ 
|-- docs/ ... 
|-- examples/ ... 
|-- package/ 
    |-- __init__.py 
    |-- module1.py 
    |-- module2.py 
    |-- subpackage/ ... 
    |-- tests/ ... 

örneğin, üst düzey ithalat adıdır scikits- öğren ve öğren. Paket, python'un içe aktarması gereken her şeye sahiptir ve paket adını kullanarak içe aktarırsınız. Örneğin from package import thing veya from package.module1 import thing. Projenin paketi ve dokümanlar, örnekler ve yükleme komut dosyaları gibi destekleyici şeyleri vardır. Projede python ithalatı olmadığından genellikle __init__.py no'lu proje olduğuna dikkat edin. Proje ve paketin aynı ada sahip olması, ancak gerekli değildir.

+0

Çok yardımcı - teşekkürler. Şimdi bir proje dizini ve paket dizini arasındaki farkı anlıyorum. –

İlgili konular