如何从车轮文件导入pyzmq?

问题描述 投票:2回答:1

我需要从pyzmq.whl文件中导入zmq,但是出现了ImportError。由于限制,我无法执行pip install

我已从pypi.org下载了“ pyzmq-18.1.0-cp37-cp37m-manylinux1_x86_64.whl”文件(它是否适用于Python 3.7.4的正确版本?),并在当前版本中将其重命名为pyzmq.whl目录。

import sys
sys.path.append("./pyzmq.whl")
import zmq

我收到此错误消息:

  File "import_zmq.py", line 3, in <module>
    import zmq
  File "pyzmq.whl/zmq/__init__.py", line 47, in <module>
  File "pyzmq.whl/zmq/backend/__init__.py", line 40, in <module>
  File "pyzmq.whl/zmq/utils/sixcerpt.py", line 34, in reraise
  File "pyzmq.whl/zmq/backend/__init__.py", line 27, in <module>
  File "pyzmq.whl/zmq/backend/select.py", line 28, in select_backend
  File "pyzmq.whl/zmq/backend/cython/__init__.py", line 6, in <module>
ImportError: cannot import name 'constants' from 'zmq.backend.cython' (pyzmq.whl/zmq/backend/cython/__init__.py)

[This question指出这是一个文件夹结构问题,但是我还没有提取wheel文件,所以我不确定如何解决此错误。

编辑:没关系,可能无法将pyzmq作为wheel文件导入,因为它依赖于CPython。参见https://www.python.org/dev/peps/pep-0427/#is-it-possible-to-import-python-code-directly-from-a-wheel-file

... Czip不支持从zip归档文件导入C扩展名(因为任何平台上的动态加载机制都不直接支持这样做)

python python-import failed-installation pyzmq python-wheel
1个回答
0
投票

无法将pyzmq作为wheel文件导入,因为它依赖于CPython。

CPython不支持从zip存档导入C扩展名(因为任何平台上的动态加载机制均不直接支持这样做。https://www.python.org/dev/peps/pep-0427/#is-it-possible-to-import-python-code-directly-from-a-wheel-file

[好的,这就是我现在的做法。我基本上是以编程方式使用pip install。另外,更改whl文件的名称也会导致问题,因此请保留原始名称。

import subprocess
try:
 import zmq
except ImportError:
 src_path = "path/to/folder/having/whl"
 pyzmq = "pyzmq-18.1.0-cp37-cp37m-manylinux1_x86_64.whl"
 target_path = "path/where/you/want/it/installed"
 install_cmd = sys.executable + " -m pip install --target=" + target_path + " " + src_path + pyzmq
 subprocess.call(install_cmd,shell=True) 
finally:
 import zmq

try块可确保如果已经安装zmq(假设此代码重复运行),我们不会重做此安装。它适用于我的特定用例,希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.