[英]Pip ignores dependency_links in setup.py despite proper format
[英]pip ignores dependency_links in setup.py
我的 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?
這個答案應該會有所幫助。 簡而言之,您需要為#egg=python-s3
指定版本(或“dev”),使其看起來像#egg=python-s3-1.0.0
。
基於@Cerin 評論的更新:
--process-dependency-links
。 我沒有測試它,因為我同意下面的觀點。因為支持 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)
我意識到這是一個老問題,但是,以防萬一你發現自己像我一樣在這里,這對我有用。
我在 GitHub(未在 pypi 中注冊)上有一個依賴於其他 GitHub(非 pypi)包的包。 我花了過多的時間試圖弄清楚如何讓 pip 正確處理這個問題。 我將在這里包括我為修復它所做的工作。
將依賴項放在 requirements.txt 文件中是列出依賴項的首選方法。 但是,您還需要在安裝程序中填充 install_requires。 正是在這個階段,我遇到了 pip 不想從 GitHub 安裝依賴項的障礙。
大多數地方,包括這個問題的答案,都會告訴您填充 setup 的 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功能。
關於我發現的一些問題的一些說明,特別是從私人存儲庫安裝。
從 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
),即使 PyPI 上沒有包。 這必須是一個實際的數字,而不是一個詞。git+
開頭來告訴 setuptools 它是克隆 repo,而不是指向 zip/tarballversion
可以是分支、標簽或提交哈希--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 在他們的遠程倉庫中有一個 tarball,但我在這里結束了一個相關的案例:只有遠程倉庫中的源代碼。
我有一個依賴項,它是 Azure DevOps 上的遠程私有存儲庫。 我想使用pip
安裝本地python包並自動安裝遠程依賴項。 遠程存儲庫是一個帶有setup.py
和一些源代碼的 python 包。 回購沒有像雞蛋/輪子/壓縮包這樣的構建工件,只有.py
文件。 我可以使用pip install git+https://...
手動安裝遠程依賴項,因此我正確地懷疑遠程存儲庫不需要包含egg/wheels/tarball。
這是我的setup.py
文件的相關行
setup.py
...
install_requires=["packagename @ git+https://dev.azure.com/.../_git/packagename"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.