2013-08-02 54 views
36

我創建一個setup.py文件依賴於私人的GitHub庫的項目。該文件的相關部分是這樣的:的Python的setuptools:如何列出下install_requires私人倉庫?

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/', 
    ], 
    ..., 
) 

我使用setuptools代替distutils,因爲後者不按this回答支持install_requiresdependency_links參數。

上面的設置文件失敗,出現404錯誤訪問私人回購協議 - 這是可以預料的,因爲GitHub的返回404,爲私人倉庫未授權的請求。但是,我不知道如何使setuptools進行身份驗證。

這裏有一些事情我已經試過:

  1. 使用git+ssh://而不是在dependency_linkshttps://因爲我想如果有pip安裝回購。失敗的原因是setuptools的不承認此協議(「未知的URL類型:混帳+ SSH」),雖然distribute documentation認爲它應該。同上git+httpsgit+http

  2. https://<username>:<password>@github.com/... - 仍然獲得了404(此方法不使用命令行curlwget工作,要麼 - 儘管curl -u <username> <repo_url> -O <output_file_name>不工作)

  3. 升級setuptools的(0.9.7)和的virtualenv( 1.10)到最新版本。也試過安裝發行,雖然this overview說它被合併回setuptools。無論哪種方式,沒有骰子。

目前我只是setup.py打印出一個警告,私人回購協議必須單獨下載。這顯然不夠理想。我覺得有些事情顯而易見,但我想不出它會是什麼。 :)

沒有答案的重複問題here

回答

1

編輯:這似乎只與公衆的github倉庫工作,看評論。

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', 
], 

上面的語法在setuptools 1.0中似乎適用於我。目前,至少將「#egg = project_name-version」添加到VCS依賴項的語法記錄在您給distribute documentation的鏈接中。

+0

指定我仍然得到同樣的404錯誤。您的案例中的回購是私人的嗎?我知道#egg =語法,但不知道它會影響身份驗證。 –

+0

對不起,這當然是一個公共回購項目。如果https // @ ... tarball URL不能用於githubs私有存儲庫,因爲這個問題似乎也表明:[having-trouble-downloading-git- archive-tarballs-from-private-repo](http://stackoverflow.com/questions/10046027/having-trouble-downloading-git-archive-tarballs-from-private-repo) – wor

+0

你也可以嘗試開發版本的setuptools和/或檢查代碼。 相關的代碼似乎是: [package_index:fetch_distribution():534](https://bitbucket.org/pypa/setuptools/src/9f475ec7aedd04ccf89483d8575808d30e31ab51/setuptools/package_index.py?at = default#cl-534) [package_index.py:_download_url():736](https://bitbucket.org/pypa/setuptools/src/9f475ec7aedd04ccf89483d8575808d30e31ab51/setuptools/package_index.py?at=default#cl-736 ) – wor

30

下面是我工作:

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

請注意,你必須有雞蛋名稱的版本號,否則會說找不到包。

+3

Hi vadimg - 您正在使用哪個版本的setuptools/distribute?我得到「未知的URL類型:git + ssh」使用分發0.7.3(最新版本)。 –

+1

3年後這對我不起作用...得到:找不到滿足要求的版本 – jsmedmar

+5

截至2016年10月28日,此方法似乎中斷 – Max

3

使用來自github的存檔URL適用於我,適用於公共存儲庫。例如。

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

我發現了一個(哈克)解決方法:

#!/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']) 

據我所知,有通過具有在安裝腳本的系統調用的倫理問題,但我想不出另一種方式去做這個。

+0

是的,這對我們來說也是一個醜陋的解決方法,由於以下原因:https://github.com/pypa/pip/issues/2822 – Tommy

+0

這是我能得到它的唯一方法,儘管我使用'import pip '。 @ vadimg的回答或[pypa/pip中的這個建議](https://github.com/pypa/pip/issues/2124)都無效。 – gens

+0

即使運行與「python setup.py --version」等安裝無關的東西,也會安裝依賴項。 – WhyNotHugo

3

我在這方面找不到任何好的文檔,但主要通過試用&錯誤發現瞭解決方案。此外,從pip &安裝setuptools有一些細微的差異;但這種方式應該適用於兩者。

GitHub不(目前,截至2016年8月)提供了一種簡單的方法來獲取私人回購的zip/tarball。所以,你需要點setuptools的告訴你指向一個混帳回購協議的setuptools:

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) 
     ] 

有兩點要注意這裏:

  • 對於私人回購協議,則需要使用GitHub的認證;我發現的最簡單的方法是創建一個oauth令牌,將其放入您的環境中,然後將其包含在URL中
  • 您需要在鏈接末尾包含一些版本號(這裏是0),甚至如果PyPI上沒有包。這必須是一個實際的數字,而不是一個字。
  • 您需要git+到序言告訴setuptools的是克隆回購,而不是在一個zip/tar包
  • version指向可以是一個分支,標籤,或提交哈希
  • 您需要提供--process-dependency-links如果從PIP安裝
+0

我得到一個無法找到標籤或分支消息。儘管我試圖克隆的私人回購確實有一個標籤。 – trendsetter37

+0

你使用了什麼命令@ trendsetter37 – Maximilian

+1

找出了問題所在。該標籤在github中有一個「v」前綴。所以我需要在我的setup.py腳本中使用'v1.1.0'而不是'1.1.0'。 – trendsetter37

相關問題