我在我的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?
我在我的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?
这个答案应该会有所帮助。简而言之,您需要指定版本 (或 "dev") 用于#egg=python-s3
的参数,使其看起来像 #egg=python-s3-1.0.0
。
根据 @Cerin 的评论更新:
--process-dependency-links
。我没有测试过,因为我同意下面的观点。pip
安装依赖于 GitHub 存储库的软件包。 - Ankur Agarwalinstall_requires=['python-s3 @ http://github.com/robot-republic/python-s3/tarball/master.tar.gz']
。 - Wolfgang Kuehn自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 @ https://github.com/user/archive/master.zip#egg=repo-1.0.0',
'anotherpackage==4.2.1'
],
)
要安装您的软件包,您可以简单地编写:
pip install yourpackage
(不带--process-dependency-links)
'repo==1.0.0 @ https://github.com/user/archive/master.zip#egg=repo-1.0.0'
改成了 'repo @ https://github.com/user/archive/master.zip#egg=repo-1.0.0'
。 - Jaakko==1.0.0
后效果很好。但问题仍然存在,我目前正在尝试覆盖一个已经在 pypi 中的包,当我执行:validators@https://github.com/kingbuzzman/validators.git#egg=validators-0.13.0
时,会得到以下输出:https://gist.github.com/kingbuzzman/e3f39ba217e2c14a9065fb14a502b63d ,它找到了 0.12.6 并使用了它,这不是我期望发生的事情。 - Javier Buzzipip
进行安装,一切都能按预期工作。当你使用本地的 python setup.py install
或者 python setup.py develop
时,每次都会安装错误的版本。讨论可以在这里进行:https://dev59.com/7LPma4cB1Zd3GeqPvb0h - Javier Buzzi我知道这是一个老问题,但如果您像我一样来到这里,以下是我解决这个问题的方法。
我在GitHub上有一个包(未在pypi中注册),它依赖于其他GitHub(非pypi)包。我花了很多时间试图弄清楚如何让pip正确处理这个问题。我会在这里包含我所做的事情。
将依赖关系放入requirements.txt文件是列出依赖项的首选方法。然而,您还需要在setup中填写install_requires。在这个阶段,我遇到了pip不想从GitHub安装依赖项的障碍。
大多数地方,包括对这个问题的回答,告诉你要填写setup的dependency_links部分。 然而,您还需要在install_requires字段中填写在dependency_links中引用的软件包的名称。
例如,如果您的requirements.txt包含以下内容。
somepackage==1.2.0
https://github.com/user/repo/tarball/master#egg=repo-1.0.0
anotherpackage==4.2.1
然后,你的设置调用应该像这样:
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显然没有起作用。 诀窍在于,在某些情况下,您需要为pip设置allow-all-external(可以更具体)标志。 例如:
pip install git+https://github.com/user/anotherrepo.git
--process-dependency-links --allow-all-external
你完成了,而且它有效!
声明:dependency_links和flags process-dependency-links和allow-all-external已经过时,因此它们很快将被删除。在我花费的时间内,我无法找到更好、更受欢迎的方法,并且仍然可以使pip正常运行。
git+https
和#egg=
部分)作为pip的参数使用。 - cowlinator关于我发现的一些问题的一些注释,特别是针对从私有仓库安装的情况。
从pip和setuptools安装有一些微妙的差别,但这种方式应该适用于两者。
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)
]
这里有几个注意事项:
0
)。这必须是一个实际的数字,而不是一个单词。git+
为前缀来告诉setuptools它要克隆存储库,而不是指向zip / tarball。version
可以是分支、标签或提交哈希值。--process-dependency-links
。首先将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版本,我见过它正常工作,或者似乎工作但并没有真正从指定链接提取依赖项,或者被拒绝。因此,我可能只会将其用作短期解决方法。尽可能使用主流方式。
以上的解决方案都没有在它们各自的显式形式中为我工作。我将其添加为另一种特定情况的解决方案。OP 在他们的远程 repo 中有一个 tarball,但我因为相关情况而来到这里:远程 repo 中只有源代码。
我有一个依赖项,它是 Azure DevOps 上的远程私有存储库。我想使用 pip
安装本地 python 包,并自动安装远程依赖项。远程存储库是一个带有 setup.py
和一些源代码的 python 包。该 repo 没有像 eggs/wheels/tarballs 这样的构建产物,只有 .py
文件。我能够使用 pip install git+https://...
手动安装远程依赖项,因此我正确地怀疑远程存储库不需要包含 eggs/wheels/tarballs。
这是我的 setup.py
文件的相关行:
setup.py
...
install_requires=["packagename @ git+https://dev.azure.com/.../_git/packagename"]
dependency_links
已经被弃用,现在应该使用requirements.txt
。但是如果你想让在pip安装你的repo时自动安装依赖项,那么这样做就不太好。有人知道现在应该怎么做吗?pip,你在吗? - Peter