Setuptools无法使用dependency_links中的链接

Hey*_*yl1 10 python setuptools distribute

我一直在尝试安装配置了以下设置的软件包:

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',
    ],
)
Run Code Online (Sandbox Code Playgroud)

但是它会从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
Run Code Online (Sandbox Code Playgroud)

如果我将版本号添加到两者中的package(xhtml2pdf-0.0.5)install_requires并且dependency_links它找到Git链接并且没有抱怨它们,但仍然从PyPi安装.

我一直在寻找一段时间的答案,但一直未能找到解决方案.我需要Git版本,因为它修复了PyPi版本还没有的版本.

Hey*_*yl1 20

好吧,所以我解决了(或者黑客攻击,取决于你如何看待它)我自己的问题.

代码有两个问题.

第一个问题是链接不正确.虽然我已经看到它在其他地方的格式如此,但它对我不起作用(无论是使用setuptools mkvirtualenv mypackage还是分发mkvirtualenv --distribute mypackage).我认为它最后需要zip扩展,并在Github上找到你可以使用https://github.com/user/project/archive/commit.zip格式下载一个特定的提交.

然后我仍然遇到这样的问题,虽然它现在可以识别链接,但它仍然会选择PyPi版本而不是Github版本.原因是Github上的最后一次提交(在发布到PyPi之后)仍然与PyPi上的最新版本具有相同的版本号.所以事实证明这个问题实际上是一个副本我如何使setuptools从另一个源安装一个包,该源也可以在具有相同版本号的pypi上获得?.为了尝试解决这个问题,我尝试了以下设置setup.py(其中一些在其他Stackoverflow问题中已经提到过):

install_requires=[],
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip',],
Run Code Online (Sandbox Code Playgroud)

这根本没有安装xhtml2pdf.

install_requires=['xhtml2pdf',],
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf',],
Run Code Online (Sandbox Code Playgroud)

这安装了最新的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',],
Run Code Online (Sandbox Code Playgroud)

这在PyPi中安装了0.0.5版本.实际上,如果版本号相同,setuptools和distribute将选择PyPi版本而不是Github版本,因为PyPi版本应该更稳定.

install_requires=['xhtml2pdf==0.0.6',],
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',],
Run Code Online (Sandbox Code Playgroud)

这是从Github下载的软件包(因为PyPi上不存在0.0.6版本),但是安装时抱怨版本不匹配,因为软件包中指定的版本实际上是0.0.5.

install_requires=['xhtml2pdf<=0.0.6',],
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',],
Run Code Online (Sandbox Code Playgroud)

这终于奏效了.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文件来提取需求.当您https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6requirements.txt文件中使用它时,它仍然可以正常使用pip install -r requirements.txt.

  • 是的,我在最后两段中提到了一个提醒:"请注意:当0.0.6版本实际发布时,我会开始遇到问题.我想正确地确定我的依赖关系,所以我不要当我重新安装时,将来遇到问题,这不是一个合适的引脚...." (2认同)