首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从轮子文件中导入pyzmq?

如何从轮子文件中导入pyzmq?
EN

Stack Overflow用户
提问于 2019-10-24 06:39:29
回答 1查看 467关注 0票数 2

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

我已经从"pyzmq-18.1.0-cp37-cp37m-manylinux1_x86_64.whl“下载了pypi.org文件(它是Python3.7.4的正确版本吗?)并将其重命名为当前目录中的pyzmq.whl。

代码语言:javascript
复制
import sys
sys.path.append("./pyzmq.whl")
import zmq

我收到了一条错误消息:

代码语言:javascript
复制
  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指出这是一个文件夹结构问题,但是我还没有提取轮式文件,所以我不知道如何修复这个错误。

编辑:无论如何,可能不可能将pyzmq作为一个轮子文件导入,因为它依赖于CPython。请参阅https://www.python.org/dev/peps/pep-0427/#is-it-possible-to-import-python-code-directly-from-a-wheel-file

来自zip归档的

...importing C扩展不受CPython支持(因为在任何平台上的动态加载机器都不直接支持这种扩展)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-06 10:07:10

不可能将pyzmq作为轮子文件导入,因为它依赖于CPython。

从压缩归档中导入C扩展不受CPython支持(因为在任何平台https://www.python.org/dev/peps/pep-0427/#is-it-possible-to-import-python-code-directly-from-a-wheel-file上,动态加载机器都不直接支持此操作)

好吧,我现在就是这样做的。我基本上是以编程方式使用pip安装。另外,更改whl文件的名称会引发问题,因此保留原始名称。

代码语言:javascript
复制
import subprocess, sys
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:
 #Sometimes "import zmq" won't work here, so do this:
 import importlib
 zmq = importlib.import_module("zmq")

try块确保如果已经安装了zmq,就不会重做此安装(假设此代码重复运行)。它适用于我的具体用例,希望这对某人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58535514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档