簡體   English   中英

pip 忽略 setup.py 中的 dependency_links

[英]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 評論的更新:

  • Pip 1.5.x 有一個標志來啟用依賴鏈接處理: --process-dependency-links 我沒有測試它,因為我同意下面的觀點。
  • 這個討論似乎表明對 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)

我意識到這是一個老問題,但是,以防萬一你發現自己像我一樣在這里,這對我有用。

我在 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)
        ]

這里有幾個注意事項:

  • 對於私有 repos,需要通過 GitHub 進行身份驗證; 我發現的最簡單的方法是創建一個 oauth 令牌,將其放入您的環境中,然后將其包含在 URL 中
  • 您需要在鏈接末尾包含一些版本號(這里是0 ),即使 PyPI 上沒有包。 這必須是一個實際的數字,而不是一個詞。
  • 您需要以git+開頭來告訴 setuptools 它是克隆 repo,而不是指向 zip/tarball
  • version可以是分支、標簽或提交哈希
  • 如果從 pip 安裝,則需要提供--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'
]
  • 版本 1.0.0 和名稱“bluealign-git”是隨機選擇的。
  • 版本號是必需的。
  • 我們建議使用名稱“bleualign-git”來區分它與主存儲庫版本。

希望這可以幫助。

評論:

好的答案(贊成)。 還想提一下,實際結果可能取決於平台和/或 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM