我的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?
Answers:
这个答案应该有所帮助。简而言之,您需要为其指定版本(或“ dev”),#egg=python-s3
使其看起来像#egg=python-s3-1.0.0
。
基于@Cerin的评论的更新:
--process-dependency-links
。我没有测试它,因为我同意以下几点。--process-dependency-links
标志为我工作。就我而言,我还必须指定不在pypi上的版本的名称。如果相同的版本在pypi上并在中的鸡蛋名称中声明,则dependency_links
pip会忽略该dependency_links
版本,而只是从pypi中获取。这是python 3.3.6上的pip 6.0.8。
pip
依赖于github存储库的存储库。
install_requires=['python-s3 @ http://github.com/robot-republic/python-s3/tarball/master.tar.gz']
我意识到这是一个古老的问题,但是,以防万一您像我一样在这里找到自己,这就是对我有用的方法。
我在GitHub上有一个软件包(未在pypi中注册),该软件包依赖于其他GitHub(非pypi)软件包。我花了大量时间试图弄清楚如何正确处理此问题。我将在此处包括为解决此问题所做的工作。
将依赖项放在requirements.txt文件中是列出依赖项的首选方法。但是,您还需要在安装程序中填充install_requires。就是在这个阶段,我遇到了一个障碍,就是不想从GitHub安装依赖项。
大多数地方,包括对此问题的答案,都告诉您填充安装程序的dependency_links部分。但是,您还需要使用dependency_links中引用的软件包名称填充install_requires字段。
例如,如果您的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和标记process-dependency-links和allow-all-external已弃用,因此将很快将其删除。在我度过的时间里,我找不到更好的首选方法,仍然可以正常使用pip功能。
--allow-external
已弃用。
Dependency links are a setuptools-specific mechanism, and are processed by setuptools' internal machinery, not by pip. So unlike direct URL links, we don't have any control over what they do. That's why we deprecated them in favour of the standard direct URL form, which we do handle ourselves.
我相信“直接URL链接”意味着您将完整的URL(包括git+https
和#egg=
位)用作pip的参数。
由于支持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)
Invalid requirement, parse error at "'@ https:'"
'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'
使其工作。
==1.0.0
很棒的作品。但是问题仍然存在,当我这样做时,我目前正在尝试覆盖当前在pypi中的软件包:validators@https://github.com/kingbuzzman/validators.git#egg=validators-0.13.0
我得到以下输出:gist.github.com/kingbuzzman/e3f39ba217e2c14a9065fb14a502b63d并找到0.12.6并使用了它。不是我所期望的发生。
pip
安装一样,一切都会按预期进行。当您使用本机python setup.py install
或python setup.py develop
它每次安装错误的版本时。可以在此处进行讨论:stackoverflow.com/questions/56046146/…–
我发现了一些有关一些问题的注释,特别是关于从私人仓库安装的问题。
从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 / tarballversion
可以是分支,标签或提交哈希--process-dependency-links
如果从pip安装,则需要提供首先升级您的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在他们的远程仓库中有一个压缩包,但我在这里遇到了一个相关案例:远程仓库中只有源代码。
我有一个依赖关系,它是Azure DevOps上的远程私有存储库。我想pip
用来安装本地python包,也可以自动安装远程依赖项。远程存储库是一个python软件包,其中包含setup.py
和以及一些源代码。回购没有像鸡蛋/车轮/ tarball这样的构建文物,只有.py
文件。我能够使用手动安装远程依赖项pip install git+https://...
,因此我正确地怀疑远程存储库不需要包含egg / wheels / tarball。
这是我setup.py
文件的相关行
setup.py
...
install_requires=["packagename @ git+https://dev.azure.com/.../_git/packagename"]
dependency_links
过时了,您应该改用Requirements.txt。但这不好,如果您希望在通过pip安装存储库时自动安装依赖项。有人知道您现在应该做什么吗?点子在吗?