簡體   English   中英

依賴管理:Python2.7需要subprocess32

[英]Dependency management: subprocess32 needed for Python2.7

我有一個庫( SUBX ),這取決於subprocess32 subprocess32庫是Python2.7的后端,提供超時kwarg。

我的圖書館需要超時kwarg。

只有目標平台是Python2.x時我才需要subprocess32。

我該如何在項目中定義依賴項?

我收到此錯誤消息,如果我通過“install_requires”(setup.py)定義與subprocess32的依賴關系,我在python3 virtualenv內:

===> pip install -e git+https://github.com/guettli/subx.git#egg=subx
Obtaining subx from git+https://github.com/guettli/subx.git#egg=subx
  Cloning https://github.com/guettli/subx.git to ./src/subx
Collecting subprocess32 (from subx)
  Using cached subprocess32-3.2.7.tar.gz
    Complete output from command python setup.py egg_info:
    This backport is for Python 2.x only.

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-lju3nl1y/subprocess32/

有一種聲明性的方式,但是它需要一個或多或少的最新版本的setuptools (如果我正確閱讀發行說明 ,你至少需要20.2版本)。 您將在下面看到的內容稱為環境標記,並在PEP 508中指定,閱讀它以獲取可用標記的完整列表,並在需要時更好地理解標記語法。

對於python版本,讓我們以您的包為例:您應該在python2.X環境中安裝subprocess32依賴項。 像這樣增強你的依賴:

install_requires=[
    'subprocess32; python_version<"3"',
]

現在使用python2.7安裝軟件包subx產生:

Processing ./dist/subx-2017.8.0-py2-none-any.whl
Collecting subprocess32; python_version < "3" (from subx==2017.8.0)
Installing collected packages: subprocess32, subx
Successfully installed subprocess32-3.2.7 subx-2017.8.0

如果你用python3.X安裝它,輸出將是:

Processing ./dist/subx-2017.8.0-py3-none-any.whl
Installing collected packages: subx
Successfully installed subx-2017.8.0

請注意,將跳過subprocess32的安裝。


另一個常見的例子是聲明特定於平台的依賴性:我有一個要求項目auditwheel要在Linux上安裝和delocate在MacOS。 我聲明這樣的依賴:

install_requires=[
    ...
    'auditwheel==1.7.0; "linux" in sys_platform',
    'delocate==0.7.1; "darwin" == sys_platform',
]

請注意,如果您沒有專門針對任何主要的python版本,則需要對Linux進行此檢查,因為:

$ python2 -c "import sys; print sys.platform"
linux2

$ python3 -c "import sys; print sys.platform"
linux

因此,如果您的包僅適用於python2.X ,則可以使用檢查"linux2" == sys.platform 這將使您的依賴項僅可以使用python2.X進行安裝。

import sys

kw = {}
if sys.version_info[0] == 2:
    kw['install_requires'] = ['subprocess32']

setup(
    …
    **kw
)

暫無
暫無

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

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