Herkes ne setup.py
olduğunu ve nasıl yapılandırılabileceğini veya kullanılabileceğini açıklayabilir mi?
Herkes ne setup.py
olduğunu ve nasıl yapılandırılabileceğini veya kullanılabileceğini açıklayabilir mi?
Yanıtlar:
setup.py
genellikle yüklemek üzere olduğunuz modülün / paketin Python Modüllerini dağıtmak için standart olan Distutils ile paketlendiğini ve dağıtıldığını söyleyen bir python dosyasıdır.
Bu, Python paketlerini kolayca yüklemenizi sağlar. Genellikle yazmak yeterlidir:
$ pip install .
pip
modülünüzü kurmak için setup.py komutunu kullanır. setup.py
Doğrudan aramaktan kaçının .
https://docs.python.org/3/installing/index.html#installing-index
setup.py
dosyanın amacını açıklar .
foo
Makinenize bir python paketi yüklemenize yardımcı olabilir (ayrıca olabilir virtualenv
), böylece paketi foo
diğer projelerden ve [I] Python istemlerinden içe aktarabilirsiniz .
Benzer işini yapar pip
, easy_install
vb.
kullanma setup.py
Bazı tanımlarla başlayalım:
Paket - __init__.py
Dosya içeren bir klasör / dizin .
Modül - .py
Uzantısı olan geçerli bir python dosyası .
Dağıtım - Bir paketin diğer paketler ve modüller ile ilişkisi .
Diyelim ki adlı bir paket yüklemek istiyorsunuz foo
. Sonra yaparsın,
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
Bunun yerine, aslında yüklemek istemiyor ancak yine de kullanmak istiyorsanız. Sonra yapın,
$ python setup.py develop
Bu komut, şeyleri kopyalamak yerine site paketleri içindeki kaynak dizine sembolik bağlantılar oluşturur. Bu nedenle, oldukça hızlıdır (özellikle büyük paketler için).
oluşturma setup.py
Paket ağacınız varsa,
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
└── setup.py
Ardından, setup.py
komut dosyasında aşağıdakileri yaparsınız, böylece bazı makinelere yüklenebilir:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
)
Bunun yerine, paket ağacınız aşağıdaki gibi daha karmaşıksa:
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
├── scripts
│ ├── cool
│ └── skype
└── setup.py
Sonra, setup.py
bu durumda sizin gibi olurdu:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
( setup.py
) Klasörüne daha fazla öğe ekleyin ve düzgün yapın:
from setuptools import setup
with open("README", 'r') as f:
long_description = f.read()
setup(
name='foo',
version='1.0',
description='A useful module',
license="MIT",
long_description=long_description,
author='Man Foo',
author_email='foomail@foo.com',
url="http://www.foopackage.com/",
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
long_description
Kullanılan pypi.org Paketinizin README açıklaması olarak.
Son olarak, paketinizi PyPi.org'a yüklemeye hazırsınız, böylece diğer kullanıcılar paketinizi kullanarakpip install yourpackage
.
İlk adım, paket adınızı ve alanınızı pypi'de talep etmektir:
$ python setup.py register
Paket adınız kaydedildikten sonra kimse bunu talep edemez veya kullanamaz. Başarılı bir kayıttan sonra, paketinizi oraya (buluta) yüklemeniz gerekir,
$ python setup.py upload
İsteğe bağlı olarak, paketinizi şu yöntemle de imzalayabilirsiniz GPG
:
$ python setup.py --sign upload
Bonus : setup.py
Burada gerçek bir projeden bir örnek görün :torchvision-setup.py
requests
-) açıkça setup.py dosyası iyi bir örnek vermek için bu projeyi sahiptir github.com/kennethreitz/setup.py
setup.py
Python'un çok platformlu bir yükleyiciye cevabı ve make
dosyaya .
Eğer komut satırı kurulumları aşina iseniz, o zaman make && make install
çevirirpython setup.py build && python setup.py install
.
Bazı paketler saf Python'dur ve sadece bayt derlenir. Diğerleri, yerel bir derleyici ( gcc
veya gibi cl
) ve bir Python arabirim modülü ( swig
veya gibi) gerektiren yerel kod içerebilir pyrex
.
python setup.py install
aslında python setup.py build
ilk önce çalışır (bu nedenle, belirli durumlarda ayrı olarak çalıştırmanız gerekmez). Her make
zaman çalıştırmadan önce manuel olarak çalıştırılması gerektiğine inanıyorum make install
.
make
herhangi bir belirli parametre (veya sipariş) gerektirmez: Tamamen Makefile
hangi "hedeflerin" (ve hangi sırayla çağrılmaları gerekir) mevcut olanın yaratıcısına bağlıdır . Çıplaklar Makefile
(genellikle) çok taşınabilir olmadığından, ./configure
(autotools) veya cmake .
(cmake) gibi komutlar kullanılarak oluşturulma eğilimindedirler ve bu programlardan make
önce açıkça çalıştırılıp çalıştırılmayacağınızı belirlemek bu programlara bağlıdır make install
.
Kök klasörde "setup.py" içeren bir paket indirdiyseniz,
python setup.py install
Bir proje geliştiriyorsanız ve bu dosyanın ne işe yaradığını merak ediyorsanız , Kurulum Komut Dosyasını yazma hakkında Python belgelerine bakın
setup.py
genellikle bu dilde yazılmış kitaplıklar veya programlarla gönderilen bir Python betiğidir. Amacı yazılımın doğru kurulumudur.
Birçok paket distutils
çerçeveyi birlikte kullanır setup.py
.
setup.py iki senaryoda kullanılabilir: İlk olarak bir Python paketi kurmak istiyorsunuz. İkinci olarak, kendi Python paketinizi oluşturmak istiyorsunuz. Genellikle standart Python paketinde setup.py, setup.cfg ve Manifest.in gibi birkaç önemli dosya bulunur. Python paketini oluştururken, bu üç dosya (yumurta-bilgi klasörü altındaki PKG-INFO içeriği) adını, sürümünü, açıklamasını, diğer gerekli kurulumları (genellikle .txt dosyasında) ve diğer birkaç parametreyi belirler. setup.cfg, paket oluşturulurken setup.py tarafından okunur (tar.gz olabilir). Manifest.in, paketinize nelerin dahil edilmesi gerektiğini tanımlayabileceğiniz yerdir. Neyse setup.py kullanarak bir sürü şey yapabilirsiniz
python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)
Setup.py ile kullanılabilecek başka komutlar da vardır. yardım için
python setup.py --help-commands
python setup.py --help-commands
. Setup.py dosyasına girerken çok kullanışlıdır.
setup.py
Terminalinizi (Mac, Linux) veya Komut İstemi'ni (Windows) açarak bir paket indirdiğinizde . cd
Sekme düğmesini kullanarak ve size yardımcı olmak, dosyayı indirdiğiniz ve bulunduğu klasörün yolunu doğrudan ayarlayın setup.py
:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
Enter tuşuna basın, şöyle bir şey görmelisiniz:
iMac:pakagefolderwithsetupfile user$
Sonra buna yazın python setup.py install
:
iMac:pakagefolderwithsetupfile user$ python setup.py install
Düğmesine basın enter
. Bitti!
İndirdiğiniz bir Python paketini yüklemek için arşivi çıkarır ve içindeki setup.py komut dosyasını çalıştırırsınız:
python setup.py install
Bana göre bu her zaman garip geldi. Bir paket yöneticisini Ruby ve Nodejs'de olduğu gibi, indirme sırasında bir paket yöneticisine yönlendirmek daha doğal olurdu.gem install rails-4.1.1.gem
Bir paket yöneticisi de daha rahat, çünkü tanıdık ve güvenilir. Öte yandan, her setup.py
biri yeni, çünkü pakete özgü. "Bu düzene güveniyorum. Geçmişte kullandığım diğer komutlarla aynı komutları alıyor" inancına inanıyor. Bu zihinsel irade için üzücü bir vergi.
Setup.py iş akışının bir paket yöneticisinden daha az güvenli olduğunu söylemiyorum (Pip'in sadece setup.py'yi çalıştırdığını anlıyorum), ancak kesinlikle awkard ve sarsıcı olduğunu hissediyorum. Tüm komutların aynı paket yöneticisi uygulamasına bağlı olması bir uyum sağlar. Hatta düşkün bile olabilirsiniz.
setup.py
diğerleri gibi bir Python dosyasıdır. setup.py
Her komut dosyası için farklı bir yordam olmaması için adlandırılmış kural dışında herhangi bir ad alabilir .
En sık setup.py
Python modülünü kurmak, ancak sunucuyu başka amaçlar için kullanmak için kullanılır:
Modüller:
Belki de bu setup.py
modüllerde en ünlü kullanımıdır . Bunlar kullanılarak yüklenebilmelerine rağmen pip
, eski Python sürümleri pip
varsayılan olarak içermiyordu ve ayrı olarak yüklenmesi gerekiyordu.
Bir modül kurmak istiyor ancak kurmak istemiyorsanız pip
, tek alternatif modülün setup.py
dosyadan yüklenmesi idi . Bu ile elde edilebilir python setup.py install
. Bu (olmadan kök sözlüğüne Python modülü yükleyecek pip
, easy_install
vb).
Bu yöntem genellikle pip
başarısız olduğunda kullanılır . Örneğin, istenen paketin doğru Python sürümü pip
belki de artık korunmadığı için kullanılamıyorsa, python setup.py install
derlenmiş ikili dosyaların olması durumu dışında , kaynağı indirip çalıştırmak aynı şeyi gerçekleştirir (ancak Python sürümü - bir hata döndürülmedikçe).
Bir başka kullanımı da setup.py
kaynaktan paket kurmaktır. Bir modül hala geliştirilme aşamasındaysa, tekerlek dosyaları kullanılamayacak ve kurmanın tek yolu doğrudan kaynaktan kurmaktır.
Python uzantıları oluşturma:
Bir modül inşa edildiğinde, bir modül kullanılarak dağıtıma hazır modüle dönüştürülebilir. kurulum betiği . Oluşturulduktan sonra bunlar yukarıdaki komut kullanılarak kurulabilir.
Bir kurulum komut dosyasının oluşturulması kolaydır ve dosya düzgün bir şekilde yapılandırıldıktan sonra çalıştırılarak derlenebilir python setup.py build
(tüm komutlar için bağlantıya bakın).
Bir kez daha adlandırıldı setup.py
kullanım kolaylığı ve konvansiyon ile adlandırılmıştır, ancak herhangi bir isim alabilir.
Cython:
Bir başka ünlü setup.py
dosya kullanımı derlenmiş uzantıları içerir. Bunlar, kullanıcı tanımlı değerlere sahip bir kurulum komut dosyası gerektirir. Hızlı (ancak derlendikten sonra platforma bağımlı) çalıştırmaya izin verirler. Belgelerden basit bir örnek :
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_modules = cythonize("hello.pyx"),
)
Bu aracılığıyla derlenebilir python setup.py build
Cx_Freeze:
Kurulum betiği gerektiren başka bir modül cx_Freeze
. Bu, Python komut dosyasını yürütülebilir dosyalara dönüştürür. Bu, açıklamalar, adlar, simgeler, paketler gibi birçok komutun dahil edilmesini, hariç tutulmasını sağlar ve çalıştırıldıktan sonra dağıtılabilir bir uygulama üretir. Belgelerden bir örnek :
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
Bu ile derlenebilir python setup.py build
.
Peki setup.py
dosya nedir?
Oldukça basit bir şekilde Python ortamında bir şey inşa eden veya yapılandıran bir betiktir.
Dağıtıldığında bir paket yalnızca bir kurulum komut dosyası içermelidir, ancak birkaç tanesini tek bir kurulum komut dosyasında birleştirmek nadir değildir. Bunun genellikle distutils
(ancak son örneğimde gösterdiğim gibi) içerdiğine dikkat edin . Hatırlanması gereken şey Python paketini / komut dosyasını bir şekilde yapılandırır.
Bu komutu oluştururken veya kurarken her zaman aynı komutun kullanılabilmesi için adı alır.
Basitleştirmek için, setup.py, yükleme işlevlerini"__main__"
çağırdığınızda belirtilen diğer yanıtları çalıştırır. Setup.py içinde, paketinizi kurmak için gereken her şeyi koymalısınız.
Aşağıdaki iki bölümde, birçok setup.py modülünün sahip olduğu iki şey ele alınmıştır.
Bu işlev, projenin adı, sürümü gibi proje özniteliklerini belirtmenize olanak tanır. En önemlisi, bu işlev düzgün bir şekilde paketlenmişlerse diğer işlevleri yüklemenizi sağlar. Setuptools.setup örneği için bu web sayfasına bakın Bu setuptools.setup
öznitelikleri, bu tür paketlerin yüklenmesini sağlar:
Projenizin ithal ve listelenen paketler PyPI kullanarak setuptools.findpackages :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
Paketler PyPI'de değil, bağımlılık_bağlantıları kullanılarak bir URL'den indirilebilir
dependency_links=["http://peak.telecommunity.com/snapshots/",]
İdeal bir dünyada setuptools.setup
her şeyi halledebiliriz. Ne yazık ki bu her zaman böyle değildir. Bazen, yüklediğiniz sistemi paketiniz için doğru duruma getirmek için alt işlem komutuyla bağımlılıklar yüklemek gibi belirli şeyler yapmanız gerekir . Bundan kaçınmaya çalışın, bu işlevler kafa karıştırıcıdır ve genellikle işletim sistemi ve hatta dağıtım arasında farklılık gösterir .