繁体   English   中英

安装Python package时如何判断支持哪个版本的.whl文件

[英]How to judge which version of .whl file is supported when install a Python package

最近,我只是尝试在 python 中连接我的 SQL 服务器。 所以我只是从“ http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql ”下载.whl 文件。 在 cmd windows 中,我使用以下命令:

pip install some-package.whl

我的电脑是 window 64bit,我尝试了以下所有 .whl 文件。 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql

pymssql‑1.0.3‑cp27‑none‑win32.whl
pymssql‑2.1.3‑cp27‑cp27m‑win32.whl
pymssql‑2.1.3‑cp27‑cp27m‑win_amd64.whl
pymssql‑2.1.3‑cp34‑cp34m‑win32.whl
pymssql‑2.1.3‑cp34‑cp34m‑win_amd64.whl
pymssql‑2.1.3‑cp35‑cp35m‑win32.whl
pymssql‑2.1.3‑cp35‑cp35m‑win_amd64.whl
pymssql‑2.1.3‑cp36‑cp36m‑win32.whl
pymssql‑2.1.3‑cp36‑cp36m‑win_amd64.whl

但安装失败,提示此系统不支持.whl 文件。 我应该怎么办。 有人可以帮助我。

对我有帮助的最简单的程序是:

第一步:以管理员身份打开cmd

第 2 步:输入python并按 Enter

你会得到这样的东西在此处输入图像描述

在这里,您可以看到您的 Python 版本和 CPU 架构

Step 3: Go on https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql and select .whl file that support both, python version and also the CPU architecture. 即对我来说支持的文件是pymssql‑2.2.2‑cp39‑cp39‑win_amd64.whl ,其中cp39表示 python 版本,在我的例子中是 3.9, amd64是 CPU 架构。

第 4 步:Go 下载所需文件的文件夹并在地址栏中输入cmd或者您可以以管理员身份打开cmd并移至下载目录在此处输入图像描述

第5步:复制所需下载文件的名称以及扩展名并运行以下命令

pip install pymssql‑2.2.2‑cp39‑cp39‑win_amd64.whl

就这样。 您可以将此方法用于本网站的任何文件。 这种方法非常适合我

我遇到了同样的问题。 如果它是 32 位 Python 版本或 64 位 Python,则它与系统上安装的 Python 版本相匹配。

所以cp36,因为我有python 3.6和win32,根据我的系统,Python是32位的。

我为我工作。

我希望这有帮助。

whl命名结构:

{distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl

在您的情况下,您需要知道您的python --version (python2.7 等的 python 标签 cp27)和您的 CPU 架构。

面对同样的问题,您需要做的就是更改 whl 文件的名称:

更改为已安装的 python 发行版然后没有用于 python 版本和任何用于平台

应该类似于pymssql‑2.1.3‑cp3‑none‑eny.whl

您可以使用包装来做到这一点。

pip install packaging

您可以使用我使用包装编写的这个简单函数compatible_wheels来过滤出系统的兼容轮子:

from packaging.tags import sys_tags


def parse_tag(wheel_filename):
    """
    Example:
        >>> parse_tag('pymssql-2.2.1-cp36-cp36m-manylinux2010_i686.whl')
        'cp36-cp36m-manylinux2010_i686'
    """
    return '-'.join(wheel_filename.split('-')[2:])[:-4]


def compatible_wheels(wheel_filenames):
    tags = [str(tag) for tag in sys_tags()]
    return [
        f
        for f in wheel_filenames
        if parse_tag(f) in tags
    ]

示例用法

>>> wheel_filenames = [
    'pymssql-2.2.1-cp36-cp36m-manylinux2010_i686.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux2014_i686.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux1_i686.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux2014_i686.whl',
    'pymssql-2.2.1-cp37-cp37m-win32.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux_2_24_x86_64.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux2010_x86_64.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux2014_i686.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux2014_i686.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux_2_24_i686.whl',
    'pymssql-2.2.1-cp38-cp38-macosx_10_14_x86_64.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux2014_x86_64.whl',
    'pymssql-2.2.1-cp38-cp38-win_amd64.whl',
    'pymssql-2.2.1-cp39-cp39-win32.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux_2_24_x86_64.whl',
    'pymssql-2.2.1-cp39-cp39-win_amd64.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux2014_x86_64.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux2010_x86_64.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux_2_24_x86_64.whl',
    'pymssql-2.2.1-cp38-cp38-win32.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux2010_i686.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux_2_24_i686.whl',
    'pymssql-2.2.1-cp37-cp37m-macosx_10_14_x86_64.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux2010_i686.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux1_i686.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux_2_24_i686.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux2014_x86_64.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux2010_x86_64.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux1_x86_64.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux1_x86_64.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux1_x86_64.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux1_i686.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux1_i686.whl',
    'pymssql-2.2.1-cp36-cp36m-manylinux2014_x86_64.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux_2_24_i686.whl',
    'pymssql-2.2.1-cp37-cp37m-manylinux_2_24_x86_64.whl',
    'pymssql-2.2.1-cp37-cp37m-win_amd64.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux2010_i686.whl',
    'pymssql-2.2.1-cp38-cp38-manylinux1_x86_64.whl',
    'pymssql-2.2.1-cp39-cp39-macosx_10_14_x86_64.whl',
    'pymssql-2.2.1-cp39-cp39-manylinux2010_x86_64.whl',
]

>>> compatible_wheels(wheel_filenames)
['pymssql-2.2.1-cp39-cp39-manylinux_2_24_x86_64.whl', 'pymssql-2.2.1-cp39-cp39-manylinux2014_x86_64.whl', 'pymssql-2.2.1-cp39-cp39-manylinux1_x86_64.whl', 'pymssql-2.2.1-cp39-cp39-manylinux2010_x86_64.whl']

# Note: I get the above output because I am using Linux. You may be getting the wheels for windows accordingly based on your system.

作为警告, pip._internal不是一个稳定的 API,所以你不想依赖它。 但如果它有帮助(就像对我一样) - 这个答案提供了一种解决问题的方法:

您可以按照以下解决方案从 pip 在 python 中获得它:

由于 pip 版本 19.3, TargetPython.get_tags()返回受支持的PEP 425 标签以检查候选车轮( 来源)。 标签按优先顺序(最优先)返回。

from pip._internal.models.target_python import TargetPython
target_python = TargetPython()
pep425tags = target_python.get_tags()

class TargetPython封装了 Python 解释器的属性,用于 package 安装、下载等。

为避免使用pip._internal ,您可以在 shell 中使用(参见此处):

$ path/to/pythonX.Y -m pip debug --verbose

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM