Kısa cevap, requirements.txt
yalnızca paket gereksinimlerini listelemek içindir. setup.py
diğer yandan daha çok bir kurulum betiği gibidir. Python kodunu yüklemeyi planlamıyorsanız, genellikle yalnızca ihtiyacınız olur requirements.txt
.
Dosya setup.py
, paket bağımlılıklarına ek olarak, paketlenmesi (veya yerel modüller olması durumunda derlenmesi (yani C ile yazılması)) gereken dosya ve modül kümesini ve python paket listelerine eklenecek meta verileri ( örneğin paket adı, paket sürümü, paket açıklaması, yazar, ...).
Her iki dosya da bağımlılıkları listelediği için, bu biraz çoğaltmaya yol açabilir. Ayrıntılar için aşağıyı okuyun.
gereksinimler.txt
Bu dosya python paketi gereksinimlerini listeler. Python projenizin paket bağımlılıklarını (satır başına bir tane ) listeleyen düz bir metin dosyasıdır (isteğe bağlı olarak yorumlarla birlikte ). O değil senin piton paket yüklü olduğu yolu tarif eder. Genellikle gereksinimler dosyasını pip install -r requirements.txt
.
Metin dosyasının dosya adı keyfidir, ancak genellikle requirements.txt
kural gereğidir. Diğer python paketlerinin kaynak kodu depolarını keşfederken, dev-dependencies.txt
veya gibi başka adlarla karşılaşabilirsiniz dependencies-dev.txt
. Bunlar dependencies.txt
, belirli bir paketin geliştiricileriyle aynı amaca hizmet eder, ancak genellikle, yani yayınlamadan önce kaynak kodunu (ör. Pytest, pylint, vb.) Test etmek için ek ilgi bağımlılıklarını listeler. Paketin kullanıcıları genellikle paketi çalıştırmak için tüm geliştirici bağımlılıkları setine ihtiyaç duymazlar.
Birden çok requirements-X.txt
varyant varsa , genellikle biri çalışma zamanı bağımlılıklarını ve diğer oluşturma zamanı veya test bağımlılıklarını listeler. Bazı projeler, gereksinim dosyalarını da basamaklandırır, yani bir gereksinim dosyası başka bir dosya içerdiğinde ( örnek ). Bunu yapmak tekrarı azaltabilir.
setup.py
Bu, setuptools
modülü bir python paketini (ad, dahil edilen dosyalar, paket meta verileri ve kurulum) tanımlamak için kullanan bir python betiğidir . Aynı requirements.txt
zamanda paketin çalışma zamanı bağımlılıklarını da listeleyecektir. Setuptools, python paketleri oluşturmanın ve kurmanın fiili yoludur, ancak zamanla pip gibi yeni "meta-paket yöneticilerinin" geliştirilmesini sağlayan eksiklikleri vardır. Kurulum araçlarının örnek eksiklikleri, aynı paketin birden çok sürümünü yükleyememesi ve bir kaldırma komutunun olmamasıdır.
Bir python kullanıcısı yaptığında pip install ./pkgdir_my_module
(veya pip install my-module
), setup.py
verilen dizinde (veya modülde) pip çalışacaktır . Benzer şekilde, bir modülü olan herhangi bir modül , örneğin aynı klasörden çalıştırılarak setup.py
kurulabilir .pip
pip install .
İkisine de gerçekten ihtiyacım var mı?
Kısa cevap hayır, ama ikisine de sahip olmak güzel. Farklı amaçlara ulaşırlar, ancak her ikisi de bağımlılıklarınızı listelemek için kullanılabilir.
Eğer arasındaki bağımlılıkları listenizi çoğaltma önlemek için düşünebilir bir hile vardır requirements.txt
ve setup.py
. setup.py
Zaten paketiniz için tam olarak çalışan bir yazdıysanız ve bağımlılıklarınız çoğunlukla dışarıdaysa, requirements.txt
yalnızca aşağıdakileri içeren bir Simple'a sahip olmayı düşünebilirsiniz :
-e .
Bu -e
, pip install
verilen paketi düzenlenebilir modda kuran özel bir seçenektir . Ne zaman pip -r requirements.txt
bu dosya üzerinde çalıştırılır, pip listeye aracılığıyla bağımlılıkları kuracaktır ./setup.py
. Düzenlenebilir seçeneği, kurulum dizininize bir sembolik bağlantı yerleştirir (yumurta veya arşivlenmiş bir kopya yerine). Geliştiricilerin, yeniden yüklemeden depodaki kodu yerinde düzenlemelerine olanak tanır.
Paket deponuzda her iki dosya da bulunduğunda, "kurulum araçları ekstraları" denen şeyden de yararlanabilirsiniz. Setup.py'de isteğe bağlı paketleri özel bir kategori altında tanımlayabilir ve bu paketleri pip ile sadece bu kategoriden kurabilirsiniz:
from setuptools import setup
setup(
name="FOO"
...
extras_require = {
'dev': ['pylint'],
'build': ['requests']
}
...
)
ve ardından, gereksinimler dosyasında:
-e path/to/mypkg[build]
Bu, tüm bağımlılık listelerinizi setup.py içinde tutacaktır.
Not : Normalde pip ve setup.py'yi programla oluşturulanlar gibi bir sanal alandan çalıştırırsınız virtualenv
. Bu, python paketlerini projenizin geliştirme ortamının bağlamı dışında yüklemekten kaçınacaktır.