Doğrudan github kaynağında gereksinimler nasıl belirtilir?


448

Komutunu kullanarak bir kütüphane kurdum

pip install git+git://github.com/mozilla/elasticutils.git

doğrudan bir Github deposundan yükler. Bu iyi çalışıyor ve benim bu bağımlılığı istiyorum requirements.txt. Ben gibi diğer biletlerin baktım bu ama bu benim sorunu çözmek vermedi. Eğer böyle bir şey koyarsam

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

içinde requirements.txtdosyası, pip install -r requirements.txtaşağıdaki çıktıda sonuçları:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

Gereksinim dosyasının belgeler kullanarak bağlantıları söz etmez git+gitkuralı belirtici, belki bu sadece desteklenmemektedir.

Benim sorunum için bir çözümü olan var mı?

Yanıtlar:


327

“Düzenlenebilir” paketler sözdizimi , requirements.txtçeşitli VCS'den (git, hg, bzr, svn) paketleri içe aktarmak için kullanılabilir :

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

Ayrıca, belirli taahhütlere işaret etmek mümkündür:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
Ben yerel olarak böyle düzenlenebilir bir sürümü (muhtemelen sözdizimi sorunları nedeniyle) ödeme başaramadı ve böylece git+git(hangi çalıştı) varyant kullanarak sona erdi . In requirements.txtSürüm işler, bu yüzden size çok fazla :) teşekkür
Alfe

1
docsBağlantı benim için çalışma değildi; Kullandığım eski bir .
osa

42
Ben anlamadım ne sözdizimi tam olarak gereksinimleri gider, yani -e önce hiçbir paket adı olmasıdır.
adaçayı

5
Paketin düzenlenebilir modda olmasını isteyip istemediğinize bağlı olarak "-e" eklemek gerekli değildir, bkz. @Qff.
Sky

17
Bunun -e git+git://yerine olmamalı mı -e git://? Bir var "ya bir yerel proje veya svn +, git + hg + veya bzr + ile VCS url başına bir yolu olmalıdır" hata iletisi.
Bruce Wayne

424

Normalde requirements.txtdosyanız şuna benzer:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Bir Github deposunu belirtmek için, package-name==kurallara ihtiyacınız yoktur .

Aşağıdaki örnekler package-twoGitHub deposunu kullanarak güncellenir . Paketteki @ve arasındaki metin #.

İşleme karmasını belirtin ( 41b95ecgüncellendi bağlamında requirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

Şube adını belirtin ( master):

git+git://github.com/path/to/package-two@master#egg=package-two

Etiketi belirtin ( 0.1):

git+git://github.com/path/to/package-two@0.1#egg=package-two

Sürüm belirtin ( 3.7.1):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

#egg=package-twoBurada bir yorum olmadığını unutmayın , paket adını açıkça belirtmek içindir.

Bu blog yazısında konu hakkında biraz daha tartışma var.


54
Diğer tüm cevaplar dışında hiçbiri sadece karşılaştırma için atılan bir git ile "normal" reqs karışımı bir gereksinimleri dosyası gösterdi inanamıyorum . Komut satırı ( -e) seçeneklerine benzeyen tarafından çok atılmıştım . Her ikisinin bir karışımını gösterdiğiniz için teşekkür ederim, böylece bunu bağlama koyabilirim!
Hendy

Serbest bırakılması 3.7.1ile işaret etmek git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twobenim için işe yaramadı. Benim için işe yarayan buydu git+git://github.com/path/to/package-two@3.7.1#egg=package-two.
Jean Paul

Bu cevap çok yardımcı oldu. Yine de bir şey. Bu git+git://...gösterim bir şekilde Linux kutumda ssh ile ilgili hatalara neden oldu. Bu yüzden onları git+https://...gösterime dönüştürdüm ve sonra mükemmel çalışıyorlar.
RayLuo

174

requirements.txtpip 7.0 itibarıyla git deposundaki bir pakete bağımlılık belirtmenin aşağıdaki yollarını sağlar: 1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

Github için bu, yapabileceğiniz anlamına gelir (atlanmış olduğuna dikkat edin -e):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

Neden ekstra cevap? Diğer cevaplardaki bayrakla
biraz kafam karıştı, -eişte benim açıklamam:

-eYa da --editablepaket yüklü olduğu bayrağının <venv path>/src/SomeProjectve dolayısıyla değil kazıkta içinde <venv path>/lib/pythonX.X/site-packages/SomeProjectbaşka türlü de yerleştirilecektir. 2

belgeleme


9
Ancak bir -esonrakini atlarsanız pip freezebu paket için doğru sonuçları vermeyebileceğinizi unutmayın
Maccesch

82

İlk olarak, git+gitveya ile git+httpsbildiğiniz herhangi bir şekilde kurun . Projenin kurulum kronokşubesine örnek brabeion:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

İkinci olarak, pip freeze > requirements.txtdoğru şeyi almak için kullanın requirements.txt. Bu durumda, alacaksınız

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

Üçüncü olarak, sonucu test edin:

pip uninstall brabeion
pip install -r requirements.txt

4
pip dondurma hala kullandığım paketi kapalı, ön versiyon olarak listeliyor. ve doğrudan bir github
kasası

4
Bir url oluşturmak için 'pip dondurma' için -e seçeneğini kullanmanız gerekir
Janusz Skonieczny

2
9.0.1 pip:no such option: -e
sds

Yani git+https? Metinde diyorsunuz git+gitve koddagit+https
Antony Hatchkins

@AntonyHatchkins düzeltildi.
osa

17

Pip'ten beri v1.5(1 Ocak 2014'de piyasaya çıktı: CHANGELOG , PR ) ayrıca modülünüzü içerecek bir git deposunun alt dizinini de belirtebilirsiniz. Sözdizimi şöyle görünür:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

Not: Bir pip modülü yazarı olarak, ideal olarak modülünüzü mümkünse kendi üst düzey deposunda yayınlamak istersiniz. Ancak bu özellik, alt dizinlerde python modülleri içeren önceden varolan bazı depolar için yararlıdır. Eğer pypi'de de yayınlanmamışlarsa bu şekilde kurmanız gerekebilir.


1

Aslında yüklemesini söylediğim şeyi yüklemek için pip3 (Ubuntu 18.04 paket yöneticisi tarafından yüklendiği gibi v9.0.1) almanın biraz zor olduğunu düşünüyorum. Bu soruna yol açan herhangi birinin zamanından tasarruf etmek için bu cevabı gönderiyorum.

Bunu bir request.txt dosyasına yerleştirilemedi:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

"Başarısız" derken kodu Git'ten indirirken, o daldaki repodaki kod yerine PyPi'de bulunan kodun orijinal sürümünü yükledi.

Ancak, şube adı yerine övgüyü yüklemek işe yarar:

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

Şubenizin de uzak olduğundan emin misiniz?
Alfe

Merak ediyorsanız, yerel bir kopyaya işaret etmiyordu.
Alacak Hesabı
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.