簡體   English   中英

你能在setuptools中為Python 2和3設置條件依賴嗎?

[英]Can you set conditional dependencies for Python 2 and 3 in setuptools?

在發布支持Python 2和3的Python egg時,您是否可以指定根據您使用的版本而更改的依賴項? 例如,如果對Python 2使用dnspython ,則會有一個名為dnspython3的Python 3版本。

你能編寫你的setuptools.setup()函數,這樣你的雞蛋可用於兩個版本,如果這是唯一的障礙,即你運行2to3以確保你的庫的其余部分兼容兩個版本。

我查看了這些文件,似乎無法找到這個問題的答案:

波格丹的評論幫助我指明了方向。 我以為我會發布我所做的事情以防其他人有我的問題。

對於問題中的例子,我完全按照波格丹的建議行事:

setup.py

import sys

if sys.version_info[0] == 2:
    dnspython = "dnspython"
elif sys.version_info[0] == 3:
    dnspython = "dnspython3"

setup(
    ... <snip> ...
    install_requires=[
        "%s >= 1.10.0" % dnspython,
    ]
)

然而,這仍然存在Travis和tox的pip風格依賴問題(鑒於Bogdan的第二條評論,我不知道為什么)。 為了解決這個問題,我創建了兩個額外的需求文件,如下所示:

要求-py2.txt

dnspython>=1.10.0

要求-py3.txt

dnspython3>=1.10.0

然后對於Travis,我使用了一些我從龍卷風中收集到的環境變量.travis.yml

.travis.yml

install:
  - if [[ $TRAVIS_PYTHON_VERSION == 2* ]]; then pip install -r requirements-py2.txt --use-mirrors; fi
  - if [[ $TRAVIS_PYTHON_VERSION == 3* ]]; then pip install -r requirements-py3.txt --use-mirrors; fi

最后,對於tox ,我不得不使用一種相當hackish的方法來使用這些多個需求文件。

tox.ini

[testenv:py27]
deps = -rrequirements-py2.txt

[testenv:py33]
deps = -rrequirements-py3.txt

@Harold的答案的setup.py部分對我不起作用:pip install distribution.whl仍然安裝if代碼說不應該的依賴項。 我將在解決此問題后的幾天內進一步更新此答案。

以下是一些可能提供其他方法來處理此問題的鏈接:

對於大多數相關但不完全相關的內容,請參閱我的答案https://stackoverflow.com/a/25078063/302521和此腳本: https//gist.github.com/pombredanne/72130ee6f202e89c13bb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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