Setuptools'un PyPI'da olmayan bir paketi yüklemesini nasıl sağlayabilirim?


142

Ben sadece setuptools ve virtualenv ile çalışmaya başladım. Paketim, yalnızca GitHub'dan temin edilebilen en yeni python-gearman'ı gerektirir. PyPI'de bulunan python-gearman versiyonu eskidir. Github kaynağı setuptools uyumludur, yani setup.py vb. Vardır. Setuptools'un yeni sürümü PyPI'de aramak ve eskisini yüklemek yerine indirip yüklemesinin bir yolu var mı?

FYI, yeni python-şanzıman http://github.com/mtai/python-gearman


1
Kaynağı oradan indirmek python setup.py installve kaynak dizinde kullanmak yerine doğrudan Git'in dışında bir python paketi yüklemeye çalışmanızın bir nedeni var mı ?
Andrew

4
Paketimin birden fazla makineye dağıtılmasını ve tüm bağımlılıklarının otomatik olarak yüklenmesini istiyorum.
andrei

2
Doğrudan Github'dan yüklemek için easy_installveya kullanabilirsiniz pip. Ama başka bir çözüm daha var, paketi PyPI'ye eklemeyi düşündünüz mü?
Wolph

2
Sadece dağıtım için olduğundan, neden kullanmıyorsunuz buildout? Birkaç hazır Git eklentisi var.
Wolph

Yanıtlar:


156

Anahtar, easy_install'a paketin nereden indirilebileceğini söylemektir. Bu özel durumda, URL http://github.com/mtai/python-gearman/tarball/master adresinde bulunabilir . Ancak, bu bağlantı kendi başına çalışmaz, çünkü easy_install sadece URL'ye ne alacağını söyleyemez.

Bunu http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta olarak değiştirerek , easy_install paket adını ve sürümünü tanımlayabilecektir.

Son adım, URL'yi paketinizin bağımlılık_ bağlantılarına eklemektir; örneğin:

setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

Şimdi, SİZİN paketiniz yüklendiğinde, easy_install bu URL'den indirilebilecek bir "gearman 2.0.0beta" olduğunu keşfedecek ve "gearman> = 2.0.0beta" seçeneğini belirlerseniz, PyPI üzerinde bulunan paketi mutlu bir şekilde seçecektir. bağımlılıklarınızda ..

(Normalde, bu tür şeylerin yapılma şekli, kişinin PyPI sayfasında indirilebilir kaynağa bir bağlantı eklemektir; bu durumda, dişli kutusu paketinin yazarı yukarıdaki gibi bir bağlantı içeriyorsa, zaten ayarlanmış olacaksınız Genellikle, insanlar geliştirme sürümünü 'myproject-dev' ile işaretler ve daha sonra insanlar 'myproject> = somever, == dev' gereksinimini kullanır, böylece bir şekilde veya daha yüksek bir paket yoksa easy_install kullanıma bakın veya sürümü indirin.)

--process-dependency-linksKullanırken belirtmeniz gerekir pip. Bağımlılık bağlantılarının işlenmesinin kullanımdan kaldırıldığını ve gelecekteki bir sürümde kaldırılacağını unutmayın.


1
Ben ne önerdi yaptım, ama "python setup.py geliştirmek" çalıştırdığınızda, "foo.egg-info / dependsency_links.txt için bağımlılık_ yazma" diyor, ama aslında paketi indirip yüklemez. Bu yardımcı olursa, setuptools tabanlı bir sanal benv kullanıyorum.
andrei

15
Ayrıca install_requires = 'gearman> = 2.0.0beta'; ekledin mi
PJ Eby

3
Benim için işe yaramıyor, betason eki PyPI'de mevcut bir sürümde, yine de paketin içinde tanımlanan yerine PyPI'den yüklenecek dependency_links. PyPI'de bulunandan daha yüksek bir sürüm ayarlamaya çalışırsanız #egg=package-version, kurulum aracı bir Could not find a version that satisfies the requirementhata ve PyPI'de bulunan tüm sürümlerin bir listesi ile şikayet edecektir . Paketimi birlikte oluşturmaya çalıştığımı ve sdistsonra yüklediğimi unutmayın pip install http://url/to/my/generated/tar.
zazabe

1
tamam, paketimi kurarak easy_install http://url/to/my/generated/tar, her şey beklendiği gibi çalışıyor ... Neden herhangi bir fikir?
zazabe

3
--process-dependency-linkspip19 itibariyle kaldırıldı ! Bakınız: github.com/pypa/pip/issues/6162
phoenix

67

pip install protocol+location[@tag][#egg=Dependency]Formatı pip kullanarak doğrudan kaynaktan kurmak için kullanabilirsiniz .

Git

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

cıvalı

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

bzr

pip install bzr+http://bzr.myproject.org/MyProject/trunk

Aşağıdaki protokoller desteklenir: [+git, +svn, +hg, +bzr]

Sürümler

@tag kontrol etmek için belirli bir sürüm / etiket belirtmenize olanak tanır.

#egg=name projenin başkalarına bağımlılık olarak ne olduğunu belirtmenize olanak tanır.

Sipariş her zaman olmalıdır @tag#egg=name.

Özel Depolar

Protokolü SSH ( ssh://) olarak değiştirerek ve uygun bir kullanıcı ( git@) ekleyerek özel depolardan da yükleyebilirsiniz :

git+ssh://git@github.com/username/my_private_repo

Bir kullanıcı adı / parola ile özel depolardan da yükleyebilirsiniz.

git+https://<username>:<password>@github.com/<user>/<repo>.git

Github oluşturma olanağı sağlayan kişisel OAuth tâbi tutulabilir

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

requirements.txt proje bağımlılıklarını belirtmek için kullanılır:

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

Bunlar paketle birlikte otomatik olarak kurulmaz ve komutla birlikte yüklenmesi gerekir pip -r requirements.txt.

Gereksinim dosyaları dahil

Gereksinim dosyaları diğer gereksinim dosyalarını içerebilir:

Gereksinim-docs.txt

sphinx
-r requirements-dev.txt

Gereksinim-dev.txt

some-dev-tool
-r requirements.txt

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

Gereksinim dosyaları setup.py, aşağıdaki komutla belirtilen bağımlılıkları yükleyebilir :

-e .

setup.pyyukarıdakiyle aynı sözdizimini kullanan ancak bu yanıttadependency_links belirtilen değeri kullanarak depolardan da yükleyebilir .

Referanslar:

https://pip.pypa.io/en/latest/user_guide.html#install-packages https://pip.pypa.io/en/latest/reference/pip_install.html


2
setup.py depolardan kurabilir. '
Setup.py dependsency_links

1
@TomDotTom Derp, bu cevabı bile iptal ettim ama bir şekilde asimilat etmedi = P Cevabımı güncelleyeceğim. Bunu işaret ettiğiniz için teşekkürler! Yaptığım bazı şeylere yardımcı olacak.
Rebs

bağımlılık_bağlantıları Bence amortisman olduğunu düşünüyorum (?) github.com/pypa/pip/issues/3939 . Bu cevabı seviyorum ve mümkün olduğu için daha iyi olduğunu düşünüyorum (setup.py'de):extras_require={'all': [repo @ git+https://github.com/username/repo.git]}
Josiah L.

21

Ben de aynı şeyi yapmak zorunda, ben olarak bunu yapmanın başka bir yolunu buldum pip'ın --process-dependency-linkskaldırılacak planlanan pipgöre 19.0 Bu yoruma .

pip 18.1 aşağıdaki özelliği içerir

PEP 508 URL gereksinimlerinin bağımlılık olarak kullanılmasına izin verin.

Gönderen açıklaması PEP 508 arasında, böyle bir URL için sözdizimi görünüyor gibi dependencies:

Minimum URL tabanlı arama:

pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686

Yani içinde senin setup.pygibi görünüyordu

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

Dikkat edin, bağlantı bir arşiv dosyasıdır ve ayrıca bu cevapta açıklandığı gibi bir deponun belirli bir sürümü veya dalı olabilir . Ayrıca, diğer havuz ana bilgisayarlarıyla çalışmak için bu cevaba bakınız.

Bildiğim kadarıyla, bağımlılığı güncellemenin en kolay yolu pip install -I ., paketinizi dizininden yüklerken kullanmaktır .


Bu ayrıca pip installgit URL'leri #subdirectory=...vb. Destekleyen her şeyi destekliyor mu? Yoksa farklı özellikleri farklı ve uyumsuz bir şekilde gösteren yepyeni bir sözdizimi mi buldular?
18'de remram

Setuptools'u kullanmazsanız ve bağımlılıkları komut satırında elle yönetirseniz , @Rebs yanıtında açıklanan yaklaşımı kullanmaya devam etmeniz gerekir .
Phil

1
Sadece bu eserler teyit etmek distutils.core.setupvepip 19.1.1
shouldsee

Elde edilen requirements.txt, ancak, ile uyumlu değildirpip install -r requirments.txt
shouldsee

@shouldsee kimi requirments.txtkastediyorsun?
Phil

6

Vanilla setuptoolsdoğrudan bir git deposundan indirmeyi desteklemez ancak bu sayfadaki Download Source bağlantılarından birini kullanabilirsiniz , örneğin:

easy_install http://github.com/mtai/python-gearman/tarball/master

Bu nedenle, python-gearman'ın bu sürümünün paketimin olacağı herhangi bir sunucuya yüklendiğinden emin olmak için, paketimi yüklemeden önce easy_install'u manuel olarak çalıştırmam gerekecek mi?
andrei

Easy_install kullanıyorsanız evet. Diğerleri işaret Ama, sen geçiş olabilir pipveya buildoutdaha sofistike gereksinimleri yönetim var hangi. Örneğin, bakınız: pip.openplans.org/#requirements-files
Ned Deily

Aslında easy_install komutunu manuel olarak çalıştırmanız gerekmez; fazladan bağlantıyı setup.py dosyasına eklemeniz yeterlidir. Ayrıntıları açıklayan bir cevap yazacağım.
PJ Eby

2
Yukarıdaki yorumumda belirtildiği gibi setup.py, bir gti deposundan indirmenize izin veren bağımlılık_ bağlantıları sağlar
TomDotTom
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.