如何使setuptools安装来自另一个源的包,该源也可以在pypi上使用相同的版本号?

2024-04-20 12:51:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个类似于How can I make setuptools install a package that's not on PyPI?的问题,但并不相同。

由于我想使用一些包的分叉版本,setuptools忽略依赖关系链接(因为它具有相同的版本号)。

有没有办法强制使用依赖关系链接中的链接?或者是更改分叉repo中版本号的唯一方法?

requires = [
    ...
    'pyScss==1.1.3'
    ...

dependencies = [
    'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3'
]

更新

奇怪的是,如果这个包是所需列表中唯一一个还没有安装的包,那么它显然可以工作。如果有另一个丢失的包,它将从pypi下载它。


Tags: install版本pypipackagemakethat关系链接
2条回答

我最后做了一些与stackoverflow.com/a/17442663/368102中的答案非常相似的事情。

我需要一个requests-filegithub包,该包的名称与PyPi中的另一个requests-file包冲突。它们都有1.0版本,而PyPi版本有一些更高的版本。

我的ias_tools/setup.py中的解决方法如下:

setup(
    ...
    install_requires=[
        'requests-file<=99.99',
    ],
    dependency_links=[
        'https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip#egg=requests-file-99.99'
    ]
)

在我的例子中,我使用的是pip,所以我还必须使用--process-dependency-links

% pip install --process-dependency-links ./ias_tools
You are using pip version 6.0.6, however version 6.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Processing ./ias_tools
  DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.
Collecting requests-file<=99.99 (from ias-tools==0.1)
  Downloading https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip
Requirement already satisfied (use --upgrade to upgrade): requests>=1.1.0 in ./venv/lib/python2.7/site-packages (from requests-file<=99.99->ias-tools==0.1)
Installing collected packages: ias-tools, requests-file
  Running setup.py install for ias-tools
  Running setup.py install for requests-file
Successfully installed ias-tools-0.1 requests-file-1.0

我不太担心不赞成的通知,因为a pull request was submitted to pip不赞成不赞成的通知(在discussion about it之后)。

我相信你可以使用这个问题中描述的dependency_links

from setuptools import setup

setup(name = 'mypkg',
    version = '0.0.1',
    description = 'Foo',
    author = 'bar',
    author_email = 'bar@example.com',
      install_requires = ['pyScss==1.1.3'],
      dependency_links = [
      'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3'
      ]
    )

使用python setup.py develop测试

你可能想重新命名鸡蛋,以强调它是一个叉子http://www.python.org/dev/peps/pep-0386/

在setup.py之外,可以使用requirements.txtpip在本地强制执行此操作。虽然这不会使您的软件包依赖于fork,但您可以轻松地将其记录为安装方法。

$ cat requirements.txt
https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3
$ pip install -r requirements.txt

相关问题 更多 >