我的setup.py中有dependency_links:
...
dependency_links = ['http://github.com/robot-republic/python-s3/tarball/master.tar.gz#egg=python-s3'],
...
但它不起作用。但是install_requires工作正常。 也许还有另一种方法来设置setup.py所需的git repo。
答案 0 :(得分:56)
This answer应该有所帮助。简而言之,您需要为#egg=python-s3
指定版本(或“dev”),使其看起来像#egg=python-s3-1.0.0
。
基于@ Cerin评论的更新:
--process-dependency-links
。我没有测试过,因为我同意以下几点。答案 1 :(得分:43)
我意识到这是一个老问题,但是,如果你发现自己和我一样,这对我有用。
我在GitHub上有一个包(没有在pypi注册),它依赖于其他GitHub(非pypi)包。我花了大量的时间试图弄清楚如何正确处理这个问题。我将在此处包含我所做的修复。
将依赖项放在requirements.txt文件中是列出依赖项的首选方法。但是,您还需要在安装程序中填充install_requires。正是在这个阶段我遇到了一个障碍,不想从GitHub安装依赖项。
大多数地方(包括此问题的答案)都会告诉您填充设置的dependency_links部分。 但是,您还需要使用dependency_links中引用的包的名称填充install_requires字段。
例如,如果您的requirements.txt包含以下内容。
filterM
然后,您的设置调用应如下所示:
somepackage==1.2.0
https://github.com/user/repo/tarball/master#egg=repo-1.0.0
anotherpackage==4.2.1
好的,现在我们已经配置了包;安装它是下一个任务。这是我花了很多时间的地方。我无法弄清楚为什么指定dependency_links显然什么也没做。诀窍在于,在某些情况下,您需要为pip设置allow-all-external(可以更具体)标志。例如:
setup(
name='yourpackage',
version='1.7.5',
packages=[],
url='',
license='',
author='',
author_email='',
description='',
install_requires=[
'somepackage==1.2.0',
'repo==1.0.0',
'anotherpackage==4.2.1'
],
dependency_links=[
'https://github.com/user/repo/tarball/master#egg=repo-1.0.0'
]
)
你已经完成并且有效!
免责声明:不推荐使用dependency_links和标志process-dependency-links和allow-all-external,因此很快就会将其删除。在我花费的时间里,我无法找到一个更好的,更喜欢的方法,并且仍然有正确的pip功能。
答案 2 :(得分:13)
A couple of notes on some issues I found, in particular for installing from private repos.
Installing from pip & setuptools have some subtle differences; but this way should work for both.
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)
]
A couple of notes here:
0
) at the end of the link, even if there's no package on PyPI. This has to be a actual number, not a word.git+
to tell setuptools it's to clone the repo, rather than pointing at a zip / tarballversion
can be a branch, a tag, or a commit hash--process-dependency-links
if installing from pip答案 3 :(得分:7)
因为支持pip版本18.1 PEP 508 URL。这意味着您不再需要不推荐使用的dependency_links。 您可以直接在install_requires列表中编写依赖项。 @Chad中的示例如下所示:
setup(
name='yourpackage',
version='1.7.5',
packages=[],
url='',
license='',
author='',
author_email='',
description='',
install_requires=[
'somepackage==1.2.0',
'repo==1.0.0 @ https://github.com/user/archive/master.zip#egg=repo-1.0.0',
'anotherpackage==4.2.1'
],
)
要安装您的软件包,您只需编写以下内容:
pip install yourpackage
(没有--process-dependency-links)
答案 4 :(得分:1)
请先升级您的pip版本,因为这是一种新语法。
pip install pip --upgrade
然后执行以下操作:
install_requires=[
'bleualign-git @ https://github.com/rsennrich/Bleualign/archive/<commit-hash or branch-name>.zip#egg=bleualign-git-1.0.0'
]
希望这会有所帮助。
评论:
好的答案(已批准)。也要提及的是,实际结果可能取决于平台和/或pip版本。我见过when it works或seemingly works but did not really pull the dependency from the specified link或简单的being rejected。因此,我可能只将其用作短时解决方法。尽可能使用主流方式。
答案 5 :(得分:0)
以上解决方案都没有以各自明确的形式对我有用。我将此添加为某些特定情况的另一种解决方案。 OP 在他们的远程存储库中有一个 tarball,但我在这里结束了一个相关的案例:只有远程存储库中的源代码。
我有一个依赖项,它是 Azure DevOps 上的远程私有存储库。我想使用 pip
安装本地 python 包并自动安装远程依赖项。远程存储库是一个带有 setup.py
和一些源代码的 python 包。存储库没有构建工件,如鸡蛋/轮子/压缩包,只有 .py
文件。我可以使用 pip install git+https://...
手动安装远程依赖项,因此我正确地怀疑远程存储库不需要需要包含鸡蛋/轮子/压缩包。
这是我的 setup.py
文件的相关行
setup.py
...
install_requires=["packagename @ git+https://dev.azure.com/.../_git/packagename"]