Pip ile bir git alt dizininden nasıl kurabilirim?


104

Biri pip ile kurulabilen bir python modülü olan birçok klasör içeren bir git depom var, şöyle:

repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...

Şu anda yüklemek için aşağıdakileri yapmam gerekiyor:

git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo

Modülü açıkça klonlamadan doğrudan pip ile kurmak mümkün müdür?

Denedim:

pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/

Ama anlıyorum:

IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'

1
Bu soru zaten yanıtlanmış gibi görünüyor: stackoverflow.com/questions/10847764/pip-install-from-git-repo
synthesizerpatel

1
Bağladığınız soru eksik dosyalar hakkındaydı çünkü MANIFEST.in yok. Sorum, pip ile bir alt dizinin nasıl kurulacağı ile ilgili, tüm depoyu klonlayarak paketi yükleyebildiğim için hiçbir dosya eksik değil.
J. Martinot-Lagarde

@synthesizerpatel Bağlandığınız soru farklı bir şey soruyor ama başlık yanıltıcıydı, ben de düzelttim. (Sanırım) olumsuz oyunuzu kaldırmayı düşünebilirsiniz.
Piotr Dobrogost

Yanıtlar:


121

Bu özellikle ilgili bir çekme talebi var ve bir ay önce şube geliştirmek için birleştirildiği görülüyor. Sözdizimi aşağıdaki gibidir :

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

Muhtemelen, ustalaşmak için birleştirilip dağıtılıncaya kadar bir süre beklemek zorundayız.

GÜNCELLEME : Bu artık https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support adresinde aşağıdaki şekilde mevcuttur ve belgelenmiştir :

Setup.py'nin projenin kök dizininde olmadığı projeler için "alt dizin" bileşeni kullanılır. "Alt dizin" bileşeninin değeri, projenin kökünden başlayarak setup.py'nin bulunduğu yere kadar bir yol olmalıdır.

Depo düzeniniz şu ise:

- pkg_dir/
  - setup.py  # setup.py for package ``pkg``
  - some_module.py
- other_dir/
  - some_file
- some_other_file

Kullanmanız gerekecek

pip install -e vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir

Not: Windows'ta, URL'yi çift tırnak içine almanız gerekir, aksi takdirde "'alt dizin' dahili veya harici bir komut olarak tanınmıyor" hatası alırsınız. Örneğin, şunu kullanın:

pip install -e "vcs+protocol://repo_url#egg=pkg&subdirectory=pkg_dir"

4
Az önce kontrol ettim ve 1 Ocak 2014'te yayınlanan pip v1.5'in bir
tomka

20
Ubuntu kullanıyorsanız, gerçek git konumundan önce tek tırnak işareti kullandığınızdan emin olun, aksi takdirde & alt dizini göz ardı edilir! Örneğin: pip install -e 'git + git.repo /… '
Lin

8
Sadece bir uyarı: bu, giriş noktaları alt dizinde bulunan paketler için işe yaramıyor gibi görünüyor (en azından pip v1.5.6'da, 6+ sürümlerinden emin değilim) . pip install -e 'git+https://…/repo.git@branch#egg=package&subdirectory=package'paketindeki sonuçları görünen yüklemek ve bir package.egg-linkdosya site paketlerinde koymak alma - ama kök dizinine işaret src/repo, değil için src/repo/packageben beklediğiniz gibi. Bu, py_modulesiçe aktarılamayacağı ve entry_pointsaslında çalışmadığı anlamına gelir : her ikisi de bir ImportError: No module named package.
Mark G.

2
-egerekli görünüyor, aksi takdirde pip freezetüm yolu göstermez, sadece yumurtayı gösterir. Bu gerçekleştipip-1.5.4
zyxue

2
diğerleri için ipucu: git + https kullanmanız GEREKİR, git + git çalışmaz, ölümcül olursunuz: uzak hata: Depo bulunamadı. muhtemelen "sorgu" dizesini doğru şekilde ayrıştırmadığı için. Yeni giriş yaptım
amohr

33

Zaten belirtildiği oldu yorumların biri doğru cevap altında, ama sadece bu sorunu vurgulamak için: Linux komut satırından bu çalıştırırken, sen gerekir escape &ve işareti arka planda bir komutu çalıştırmak için komut satırını anlatıyor beri karakterlik:

git+https://git.repo/some_repo.git#egg=version_subpkg\&subdirectory=repo

Ve işaretinden önceki ters eğik çizgiye dikkat edin. Kaçış davranışı Linux dağıtımına bağlı olabilir; Ben uzman değilim
Bunu görmezden gelirseniz, aşağıdaki gibi şifreli bir hatayla karşılaşabilirsiniz:

bash: (...) command not found

1
URL'yi tek tırnak içine almak, "ve" işaretinden kaçma ihtiyacını ortadan kaldırmaya yardımcı olur mu? Bunun cURL'deki URL'lerle çalışırken yararlı olduğunu biliyorum.
Josh Peak

1
Ayrıca şunu da belirtmek gerekir: Bunu Windows komut satırından çalıştırırken, URL'yi çift tırnak içine almanız gerekir, aksi takdirde "'alt dizin" dahili veya harici bir komut olarak tanınmıyor "hatası alırsınız. Örneğin, pip install -e "git + myurl / proj # egg = subpkg & subdirectory = subdir " kullanın

Genel olarak, kabuk komut dosyalarıyla çalışırken, güvenli tarafta olmak için bağımsız değişkenlerin etrafında çift tırnak kullanın. daha fazla en iyi uygulama için bkz. shellcheck.net veya github.com/koalaman/shellcheck
Erik Aronesty


6
Şube tabanlı yükleme kullanımı için:pip install git+ssh://git@github.com/org_or_username/repo.git@branch#subdirectory=path/to/dubdir
RDK
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.