2013-08-02 25 views
36

Özel GitHub depolarına bağlı bir proje için setup.py dosyası oluşturuyorum. Dosyanın ilgili kısımları şöyle: Ben setuptools yerine distutils kullanıyorumPython setuptools: install_requires altındaki özel bir depoyu nasıl listeleyebilirim?

from setuptools import setup 
setup(name='my_project', 
    ..., 
    install_requires=[ 
     'public_package', 
     'other_public_package', 
     'private_repo_1', 
     'private_repo_2', 
    ], 
    dependency_links=[ 
     'https://github.com/my_account/private_repo_1/master/tarball/', 
     'https://github.com/my_account/private_repo_2/master/tarball/', 
    ], 
    ..., 
) 

ikincisi this Yanıt başına install_requires ve dependency_links argümanlar desteklemediği için.

Yukarıdaki kurulum dosyası, 404 hatasıyla özel depolara erişememektedir. Bu, GitHub'ın özel bir depo için izinsiz olarak yapılan isteklere 404 değerini döndürdüğünden, beklenen bir durumdur. Ancak, setuptools kimlik doğrulamasını nasıl yapacağımı anlayamıyorum.

İşte denedim bazı şeyler şunlardır:

  1. Kullanım git+ssh:// yerine dependency_links yılında https://pip ile repo yüklerken eğer yaptığınız gibi. Kur, bu protokolü ("bilinmeyen url türü: git + ssh") tanımaz çünkü bu başarısız olur, ancak distribute documentation gerekir. Ditto git+https ve git+http.

  2. https://<username>:<password>@github.com/... - yine de 404 almak (Bu yöntem, komut hattı curl veya wget çalışmaz ya da -. curl -u <username> <repo_url> -O <output_file_name> çalışma olsa)

  3. büyütülmesi Setuptools'u (0.9.7) ve virtualenv (1.10) en son sürümlere. Ayrıca dağıtımı yüklemeyi denedim, ancak this overview, setuptools'a yeniden birleştirildiğini söylüyor. Her iki şekilde de, zar yok.

Şu anda sadece özel repolar ayrı olarak yüklenmesi gerekir belirten bir uyarı setup.py çıktısını var. Bu açıkça idealden daha azdır. Eksik olduğum belli bir şey var gibi hissediyorum, ama ne olabileceğini düşünemiyorum. :)

Yanıtı olmayan bir soru sor here.

cevap

1

Düzenleme: Bu yalnızca genel github depolarıyla çalışır, yorumlara bakın.

dependency_links=[ 
    'https://github.com/my_account/private_repo_1/tarball/master#egg=private_repo_1', 
    'https://github.com/my_account/private_repo_2/tarball/master#egg=private_repo_2', 
], 

Sözdizimi yukarıda benim için setuptools 1.0 ile çalışıyor gibi görünüyor. Şu anda, en azından distribute documentation'a verdiğiniz bağlantıda "# egg = project_name-version" ekleyerek VCS bağımlılıklarının sözdizimi belgelenmiştir.

+0

belirtilmiştir github), hala aynı 404 hata alıyorum. Davanızdaki davalar özel mi? # Egg = sözdiziminin farkındayım, ancak kimlik doğrulamasını etkilediğini bilmiyorum. –

+0

Üzgünüm, elbette bir kamu repo projesiydi. Https // : @ ... tarball URL'leri githubs özel depolarıyla çalışmazsa, mevcut kurulum yöntemleriyle bunu yapmanın herhangi bir yolu yoktur: [having-trouble-downloads-git- arşiv-tarballs-from-private-repo] (http://stackoverflow.com/questions/10046027/having-trouble-downloading-git-archive-tarballs-from-private-repo) – wor

+0

Ayrıca kurulum araçlarının geliştirme sürümünü de deneyebilirsiniz ve/veya kodu kontrol edin. ilgili kod gibi görünüyor: [package_index: fetch_distribution(): 534] (https://bitbucket.org/pypa/setuptools/src/9f475ec7aedd04ccf89483d8575808d30e31ab51/setuptools/package_index.py?= Varsayılan # cl-534) [package_index.py:_download_url():736](https://bitbucket.org/pypa/setuptools/src/9f475ec7aedd04ccf89483d8575808d30e31ab51/setuptools/package_index.py?at=default#cl-736 at) – wor

30

İşte benim için çalıştı budur: Eğer yumurta adında sürüm numarası olması gerekir

install_requires=[ 
     'private_package_name==1.1', 
    ], 
    dependency_links=[ 
     'git+ssh://[email protected]/username/private_repo.git#egg=private_package_name-1.1', 
    ] 

Not aksi takdirde bu paket bulamıyor diyecekler.

+3

Merhaba vadimg - Hangi setuptools/dağıtım sürümünü kullanıyorsunuz? 0.7.3 (son sürüm) dağıtımı kullanarak "Unknown url type: git + ssh" alıyorum. –

+1

Bu benim için 3 yıl sonra işe yaramadı ... Got: – jsmedmar

+5

gereksinimini karşılayan bir sürüm bulamadı 28 Ekim 2016 itibariyle, bu yaklaşım bozuk görünüyor – Max

3

Github'un arşiv URL'sini kullanmak, benim için halka açık depolar için çalışır. Örneğin.

dependency_links = [ 
    'https://github.com/username/reponame/archive/master.zip#egg=eggname-version', 
] 
1

Ben (hacky) geçici çözümü buldum: Ben bir kurulum komut bir sistem çağrısı sahip etik sorunlar olduğunu anlamak

#!/usr/bin/env python 

from setuptools import setup 
import os 

os.system('pip install git+https://github-private.corp.com/user/[email protected]') 

setup(name='original-name' 
    , ... 
    , install_requires=['repo']) 

, ama yapacak başka bir yol düşünemiyorum bu.

+0

evet bu da aşağıdakiler nedeniyle bizim için çirkin bir geçici çözümdü: https://github.com/pypa/pip/issues/2822 – Tommy

+0

Bu, ithalat pipüyle gittiğim halde işe alabileceğim tek yol bu oldu. '. Ne de @ vadimg'in cevabı ya da [pypa/pip'teki bu öneri] (https://github.com/pypa/pip/issues/2124) çalıştı. – gens

+0

Bu, 'python setup.py --version' gibi kurulumla ilgisi olmayan bir şey çalıştırıyor olsa bile bir bağımlılık yükleyecektir. – WhyNotHugo

3

Bu konuda iyi bir belge bulamadık, ancak genellikle deneme sürümü & hatayla karşılaştı. Dahası, & numaralı pipetten kurulum, bazı ince farklara sahiptir; ama bu yol her ikisi için de çalışmalıdır. GitHub (şu anda, Ağustos 2016 itibariyle) özel postaların zip/tarball'unu almanın kolay bir yolunu sunmamaktadır. Yani bir git repo işaret edip Setuptools'u anlatmak için Setuptools'u işaret etmek gerekir:

from setuptools import setup 
import os 
# get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/ 
github_token = os.environ['GITHUB_TOKEN'] 

setup(
    # ... 
    install_requires='package', 
    dependency_links = [ 
    'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0' 
     .format(github_token=github_token, package=package, version=master) 
     ] 

burada birkaç not: Özel repo için

  • , sen GitHub'dan ile kimlik doğrulaması gerekir; Bulduğum en basit yol, bir oauth belirteci oluşturmak, bunu ortamınıza bırakmak ve daha sonra URL'ye
  • URL'sini dahil etmektir. Bağlantının sonuna bazı sürüm numarası (burada 0) eklemeniz gerekir. PyPI'de paket yoksa. Bu gerçek bir sayı olmalı, bir kelime değil.
  • Bunu yerine bir dal, bir etiket olabilir veya bir karma
  • Sen --process-dependency-links tedarik gerek işlemek bir zip/tarball
  • version işaret yerine, repo klonlamak var Setuptools'u anlatmak için git+ ile önsöz gerekir pipten yükleme eğer
+0

Etiket veya şube mesajı bulamıyorum. Klonlamaya çalıştığım özel repo'nun bir etiketi olmasına rağmen. – trendsetter37

+0

Hangi trendi kullanıyorsunuz @ trendsetter37 – Maximilian

+1

sorunun ne olduğunu anladım. Etikette, github'a bir "v" harfi eklenmişti. Bu yüzden, setup.py betiğimde '1.1.0' yerine' v1.1.0' kullanmam gerekiyordu. – trendsetter37

0

bizim senaryo için Bu çalışma: özel repo

  1. paket github üzerinde
  2. biz
  3. -r requirements.txt
  4. -e reposdir yüklemek pip kullanabilme yüklemek pip kullanmak mümkün (değil -e ile ./src içine) site paketleri içine yüklemek istediğiniz (ya gelen bağımlılıklar sadece requirements.txt

https://github.com/pypa/pip/issues/3610#issuecomment-356687173

İlgili konular