Soru Setuptools ve alternatifleri hakkında sorular


Son zamanlarda internette dolaşan birtakım kurgu parçaları gördüm. Son zamanlarda James Bennett’i okudum. Ambalaj üzerinde Kimsenin neden setuptools kullanmaması gerektiğini açıkla. Freenode'daki #python'daki zamanımdan, orada kesinlikle bir kaç ruhun var olduğunu biliyorum. Kendimi onların arasında sayıyordum, ama aslında onu kullanıyorum.

Eksikliklerinin farkında olmak için yeterli proje için kurulum araçları kullandım ve daha iyisini tercih ederim. Özellikle yumurta formatını ve nasıl kullanıldığını beğenmiyorum. Tüm setuptools'un problemleriyle daha iyi bir alternatif bulamadım.

Benim gibi araçlara anlayışım bip bunun bir easy_install yedeği olması (setuptools değil) olması. Aslında pip, bazı setuptools bileşenlerini kullanır, değil mi?

Paketlerimin çoğu, tüm bağımlılıkları bildiren, setuptools uyumlu setup.py'yi kullanıyor. Hazır olduklarında bir sdist, bdist ve bdist_egg kurar ve bunları pypi'ye yüklerim.

Pip kullanmaya geçmek istediğimde, easy_install bağımlılıklarından kurtulmak için ne tür değişiklikler yapmam gerekiyor? Bağımlılıklar nerede ilan edildi? Sanırım yumurta formatını kullanmaktan kurtulmak ve sadece kaynak dağılımı sağlamak zorundayım. Öyleyse, yumurta bilgi dizinlerini nasıl oluştururum? ya da ihtiyacım var mı?

Bu sanalenv kullanımını nasıl değiştirir? Sanal ortam, ortamları yönetmek için easy_install kullanmıyor mu?

Bu, "geliştir" komutu sağlanan kurulum araçlarını kullanmamı nasıl değiştirir? Bunu kullanmamalı mıyım? Alternatif nedir?

Temel olarak geliştirme iş akışımın nasıl görüneceğine dair bir resim almaya çalışıyorum.

Birisi bunu önermeden önce, işletim sistemine bağımlı bir çözüm aramıyorum. Ben esas olarak debian linux ile ilgileniyorum, ama deb paketleri bir seçenek değil, Ian Bicking özetliyor nedenleri için İşte.


21
2017-12-15 15:06


Menşei


Tarihinin bir kısmı setuptools, distutils, distutils2, pipve arkadaşlar tartışıldı İşte. - intuited


Cevaplar:


pip Setuptools'u kullanır ve paketlerde herhangi bir değişiklik gerektirmez. Aslında, aşağıdakileri kullanarak paketleri Setuptools ile yükler:

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

Çünkü bu seçeneği kullanıyor (--single-version-externally-managed), dosyaları zip dosyaları olarak yüklemez, aynı anda birden fazla yazılım yüklemesini desteklemez ve paketler düz python setup.py install sadece distutils kullanırsanız çalışır. Yumurta meta verileri hala yüklü. pip ayrıca, easy_install gibi, bir paketin tüm gereksinimlerini indirir ve yükler.

ek olarak Ayrıca, bir kümeye yüklenecek diğer paketleri eklemek ve sürüm gereksinimlerini daha kesin hale getirmek için bir gereksinim dosyası da kullanabilirsiniz. setup.py Dosyalar). Ancak gereksinim dosyaları yapmazsanız, bunu sadece easy_install gibi kullanırsınız.

Senin için install_requires İyi olduğu bilinen çok kesin gereksinimleri oluşturmaya çalışmadığınız sürece hiçbir değişiklik önermem. Bence tam olarak ne kadar yararlı olabileceğinizin bir sınırı var. setup.py sürümler hakkında dosyalar, çünkü yeni kütüphanelerin gelecekteki uyumluluğunun ne olacağını gerçekten bilemezsiniz ve bunu tahmin etmeyi önermiyorum. Gereksinim dosyaları, muhafazakar sürüm gereksinimlerini düzenlemek için alternatif bir yerdir.

Hala kullanabilirsiniz python setup.py developve aslında yaparsanız pip install -e svn+http://mysite/svn/Project/trunk#egg=Project bunu kontrol edecek (içine src/project) ve koş setup.py develop üstünde. Böylece iş akışı gerçekten farklı değil.

Eğer boruyu biraz çalıştırırsanız ( pip install -vv) çalıştırılan komutların çoğunu göreceksiniz ve muhtemelen bunların çoğunu tanıyacaksınız.


25
2017-12-15 23:29



Bununla ilgili daha fazla ayrıntıyı bilmek isterim "Ayrıca, bir toplu iş olarak yüklenmesi gereken diğer paketler eklemek ve sürüm gereksinimlerini daha kesin hale getirmek için bir gereksinim dosyası da kullanabilirsiniz". - Drake Guan


Bunu Nisan 2014'te yazıyorum. Python ambalajı, dağıtımı veya kurulumu ile ilgili yazılan her şeyin tarihinin bilincinde olun. Görünüşe göre, gerçekte, doğruluk, küçümseme, uygulamalarda iyileştirme, son iki yılda PEP standartlarını belirleme ve birleştirmeler gibi görünüyor.

Örneğin, Python Ambalaj Yetkilisi "Python ambalajında ​​ilgili projelerin çoğunu sürdüren bir çalışma grubu."

python.org  Python Ambalaj Kullanıcı Kılavuzu vardır Araç Önerileri ve Python Ambalajın Geleceği bölümleri.

distribute bir dalıydı setuptools Bu, Haziran 2013'te yeniden hayata geçirildi. setuptools projeleri tanımlamak ve Kaynak Dağılımları oluşturmak. "

PEP 453 ve Python 3.4'ten itibaren rehber, " pip Python paketlerini PyPI'den yüklemek için pip Python 3.4 ile birlikte gelir ve virtualenvs tarafından pyvenvAyrıca dahil edilmiştir. Bulabilirsiniz PEP 453 "mantık" bölümü ilginç.

Rehberde belirtilen yeni ve yeni araçlar da var. wheel ve buildout.

Aşağıdaki teknik / yarı-politik hikayeleri okuduğuma sevindim.

2009 yılında Martijn Faassen tarafından: Python Paketleme Tarihi.

Ve Armin Ronacher tarafından Haziran 2013'te (başlık ciddi değil): Python Ambalaj: Nefret et, nefret et, her yerden nefret et.


3
2018-04-18 19:00





Yeni başlayanlar için pip gerçekten yeni. Gerçek dünyada yeni, eksik ve büyük ölçüde test edilmemiştir.

Bu harika bir söz veriyor, ancak easy_install / setuptools'un büyük ihtimalle, şirkette değil, büyük bir ihtimalle yakalayacağı her şeyi yapabileceği zamana kadar.

Easy_install / setuptools büyük ve karmaşıktır ve bu da birçok insanı rahatsız eder. Ne yazık ki, çok sayıda farklı kullanım durumu için sunduğu karmaşıklık için gerçekten iyi bir neden var. Kendim, büyük (> 300) bir masaüstü kullanıcısı havuzunu ve sık güncellenen bir uygulama ile benzer boyutlu bir ızgarayı destekliyor. Her kullanıcının kaynağından yüklemesine izin vererek bunu yapabileceğimiz fikri, yumurtalarımı projemi dağıtmak için güvenilir bir yol olduğunu kanıtladı.

Tavsiyem: Kurulum araçlarını kullanmayı öğrenin - gerçekten harika bir şey. Nefret eden insanların çoğu bunu anlamamakta ya da tam özellikli bir dağıtım sistemi olarak kullanım durumlarına sahip değildir.

:-)


2
2017-12-15 18:24



Dürüst olmak gerekirse, setuptools'u oldukça iyi tanıyorum. Onunla bazı saplar var .. temelde yumurta dosyalarının dağıtımını nasıl ele alıyor. Şu anda benim için yeterince iyi çalışıyor, ama python topluluğunda (kimin kime saygı duyduğunu) çok fazla insanın dokunmayacakları var. - Jeremy Cantrell
Pip yeni olsa da, sizin için çalışıyorsa, o zaman sizin için çalışır - bu korkunç değildir ince. Çoğunlukla easy_install gibi, paketleri bulur, indirir ve yükler (python setup.py kurulumunu çağırarak veya -e'yi kullanırsanız python setup.py'yi geliştirerek). - ianb
setuptools, korunmaz ve python 3'ü desteklemez. Muhtemelen distribute - sorin