2013-06-28 14 views
9

我一直在試圖與配置以下設置安裝軟件包的鏈接:setuptools的無法使用從dependency_links

setup(
    packages=find_packages(), 
    include_package_data=True, 
    install_requires=[ 
     'Django==1.5.1', 
     'xhtml2pdf', 
    ], 
    dependency_links=[ 
     'https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf', 
    ], 
) 

然而,一封來自PyPI安裝,而不是使用指定的鏈接XHTML2PDF包。根據輸出結果(我使用pip install -vvv package.tar.gz進行安裝),它可能無法從鏈接解析版本(代碼爲// 1),或者我沒有指定正確的項目名稱(代碼爲// 2):

Downloading/unpacking xhtml2pdf (from mypackage==1.3) 
    Getting page https://pypi.python.org/simple/xhtml2pdf/ 
    URLs to search for versions for xhtml2pdf (from mypackage==1.3): 
    * https://pypi.python.org/simple/xhtml2pdf/ 
    * https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf 
    Getting page https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947 
    Analyzing links from page https://pypi.python.org/simple/xhtml2pdf/ 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.1.tar.gz#md5=9f83a2bcb67858aca9e058761f3bea7b (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.1 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.2.tar.gz#md5=d640ccb9470942fd2e6d3ae740c27dc1 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.2 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.1.zip#md5=4ad41c845735ae14da99085311d84c00 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.1 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.4.zip#md5=5f035cd6532bef99b7d35054caaa6ef7 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.4 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.3.zip#md5=32599c74f26f57ebd002765741ec64f7 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.3 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.2.zip#md5=4047a8234eb6b77591d526dcb1f60161 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.2 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.3.tar.gz#md5=13b0d6059b72c994473fddfa7a528451 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.3 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.zip#md5=8db99aae8536436a2b7b0b3987197b99 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.5 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.tar.gz#md5=1ef268b40c11bf966f7c6c5504299e3e (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.5 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.4.tar.gz#md5=36b015a4e2918460711cbc5eebe026ce (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.4 
    Analyzing links from page https://codeload.github.com/chrisglass/xhtml2pdf/legacy.zip/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947 
    Could not parse version from link: https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf // 1 
    Skipping link https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf; wrong project name (not xhtml2pdf) // 2 
    Using version 0.0.5 (newest of versions: 0.0.5, 0.0.5, 0.0.4, 0.0.4, 0.0.3, 0.0.3, 0.0.2, 0.0.2, 0.0.1, 0.0.1) 
    Downloading xhtml2pdf-0.0.5.zip (118kB): 
    Downloading from URL https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.zip#md5=8db99aae8536436a2b7b0b3987197b99 (from https://pypi.python.org/simple/xhtml2pdf/) 
...Downloading xhtml2pdf-0.0.5.zip (118kB): 118kB downloaded 

如果我在版本號install_requiresdependency_links的包中添加版本號(xhtml2pdf-0.0.5),它會找到Git鏈接並且不會抱怨它們,但仍然從PyPi安裝。

我一直在尋找一個答案,但一直沒能找到解決方案。我需要Git版本,因爲它修復了PyPi版本尚未解決的問題。

+0

的可能重複[我怎樣才能讓setuptools的從其他來源這也可在具有相同版本號的PyPI安裝包?(http://stackoverflow.com/questions/11032125/how-can-i-make -setuptools-install-a-package-from-another-source-thats-also-avai) –

+0

是的,它是[我怎樣才能讓setuptools從另一個來源安裝軟件包,也可以在pypi上使用相同的版本編號?](http://stackoverflow.com/questions/11032125/how-can-i-make-setuptools-install-a-package-from-another-source-thats-also-avai),我已經宣佈我給了我自己的問題的答案。 – Heyl1

回答

15

好的,所以我解決了(或砍死,取決於你如何看待它)我自己的問題。

代碼有兩個問題。

第一個問題是鏈接不正確。儘管我已經看到它在其他地方格式化,但它不適用於我(無論是使用setuptools mkvirtualenv mypackage還是分發mkvirtualenv --distribute mypackage)。我認爲它需要最後的zip擴展,並在Github上發現,你可以使用https://github.com/user/project/archive/commit.zip格式下載特定的提交。

然後,我仍然有問題,即使它現在可以識別鏈接,它仍然會選擇PyBi版本通過Github版本。原因是Github上的最後提交(在PyPi發佈之後)仍然與PyPi上的最新版本具有相同的版本號。所以事實證明這個問題實際上是How can I make setuptools install a package from another source that's also available on pypi with the same version number?的重複。 要嘗試解決這個問題我在setup.py(其中的一些已經在其他問題#1被提及作爲工作)試圖進行以下設置:

install_requires=[], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip',], 

這並沒有安裝xhtml2pdf可言。

install_requires=['xhtml2pdf',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf',], 

安裝了最新的PyPi版本(0.0.5)。

install_requires=['xhtml2pdf==0.0.5',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.5',], 

這在PyPi中安裝了0.0.5版本。 如果版本號相同,那麼setuptools和distribute會選擇PyBi版本的GitHub版本,因爲PyPi版本應該更穩定。

install_requires=['xhtml2pdf==0.0.6',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',], 

此下載從GitHub包(因爲版本0.0.6不PyPI上存在),但是來安裝時就抱怨版本不匹配,因爲在包中指定的版本實際上是0.0.5。

install_requires=['xhtml2pdf<=0.0.6',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',], 

這終於奏效了。 Setuptools(和發行版)意識到Github版本必須更新,因爲這就是我所說的。而來安裝時間它並沒有抱怨實際版本是0.0的事實。5因爲它仍然符合要求。

你可能會認爲這有點破解。我對這個解決方案並不滿意。但我也有一個截止日期,它的工作原理。謹慎的說法:當版本0.0.6被實際發佈時,我將開始出現問題。我想正確固定我的依賴關係,所以在重新安裝時我不會遇到問題,而且這不是一個適當的引腳。不過,我想你可以用這個文檔來翻譯版本號: https://pythonhosted.org/setuptools/setuptools.html#specifying-your-project-s-version。 關鍵是版本應該(假裝)高於0.0.5,而且還有一個數字(帶有可選字符),你將不會期望在將來顯示爲PyPi中的版本(並且明顯低於下一個版本號很可能是(本例爲0.0.6))。

我希望這對其他人有幫助:)。

注:我使用requirements.txt文件,該文件由setup.py文件處理以提取要求。當您在requirements.txt文件中使用https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6時,它仍然會使用pip install -r requirements.txt安裝正常。

+0

當上遊移動到下一個版本增量時,這一定會突破嗎? –

+2

是的,我提到,在謹慎的一個字最後但二款: 「提醒一句:我會開始有當版本0.0.6實際發佈我想正確的針我的依賴問題,所以當我重新安裝時,我不會遇到問題,而這不是一個適當的引腳......「 – Heyl1