当前位置: 首页 > 面试题库 >

Setuptools无法使用dependency_links中的链接

鄢翰藻
2023-03-14
问题内容

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

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

如果我xhtml2pdf-0.0.5在两者中都将版本号添加到程序包()中install_requiresdependency_links它会找到Git链接并且不抱怨它们,但仍从PyPi安装。

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


问题答案:

好的,所以我解决了(或者被黑客入侵,具体取决于您的看法)我自己的问题。

代码有两个问题。

第一个问题是链接不正确。尽管我已经在其他地方看到过这种格式的文件,但是它对我来说不管用(无论是使用setuptoolsmkvirtualenv mypackage还是Distribution mkvirtualenv --distribute mypackage)。我发现它最后需要zip扩展,并在Github上发现可以使用该https://github.com/user/project/archive/commit.zip格式下载特定的提交。

然后我仍然有一个问题,尽管它现在可以识别链接了,但仍然会选择Github版本上的PyPi版本。原因是,Github上的最后一次提交(在发布到PyPi之后)仍具有与PyPi的最新版本相同的版本号。因此,事实证明,这个问题实际上是如何使setuptools从另一个来源(也可以在pypi上使用相同版本号的另一个来源)安装软件包的重复项目?。为了解决这个问题,我尝试了以下设置setup.py(其中一些在其他Stackoverflow问题中已经提到有效):

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和distribution会选择Github版本上的PyPi版本,因为PyPi版本应该更稳定。

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

这是从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',],

终于成功了。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



 类似资料:
  • 我希望使用SetupTools将一个包部署到PyPi。但是,包的核心部分实际上是用Fortran编写的,我正在使用f2py用Python包装。基本上,项目的结构如下所示: null myfunc.py模块导入hello.so(),然后myfunc.py中的函数可以使用该模块。这在我的机器上很好用。 然后我在我的Ubuntu上尝试了标准的setuptools安装:,结果安装得很好。但不幸的是,在导入

  • 但它不起作用并抛出NoSuchElementException NoSuChelementException:消息:找不到元素:{“Method”:“XPath”,“Selector”:“//A[@href=\”WLSwitchInterFace0.wl\“]”}

  • 我刚安装了Python3。7和Pycharm。我正在运行pip 9.0版。2. 在Pycharm中,它说我有28.8版。当我尝试在Pycharm中升级它时,我相信它运行正常 我得到一个错误: PermissionError:[WinError 32]进程无法访问该文件,因为它正被另一个进程使用:'c:\user\Username\pycharmproject\untitled1\venv\lib\

  • 问题内容: 我正在开发一个具有多个.txt依赖项的Python egg(它们是用于通过egg本身生成文件的模板),而我正努力将这些依赖项复制到期间。根据文档… 我的软件包的文件系统: 在setup.py中: 在我的包装内: …配置和文件系统的这种组合应导致并通过提供。不幸的是,它们在期间没有被复制到。我想念什么? 谢谢! 问题答案: 您是否查看过setuptools文档,其中包含软件包数据:htt

  • 我关注了以下链接:https://docs.microsoft.com/en-us/xamarin/android/platform/app-linking 首先,我创建了一个数字资产文件。众所周知/assetlinks.json存储在我的IIS服务器中。我可以通过运行:https://digitalassetlinks.googleapis.com/v1/statements: list?sou

  • 在Android 10上,我可以使用CustomTabsInt打开PDF http链接(它重定向到驱动PDF查看器),但在Android 12测试版(在Android虚拟设备上)上,它总是显示下载对话框: 它似乎与Android 12 Web意图解析有关(https://developer.android.com/about/versions/12/web-intent-resolution#re