【问题标题】:python import error in gzip.py ; where is zlibgzip.py 中的 python 导入错误; zlib在哪里
【发布时间】:2013-04-02 05:00:20
【问题描述】:

我正在运行默认使用 python 2.7 的 Ubuntu 12.10。我已经在 /opt/python3.3 中安装了 python 3.3(使用 ./configure --prefix=/opt/python3.3)并创建了一个符号链接 /usr/bin/python33 指向 /opt 中的可执行文件。已经有一个符号链接 /usr/bin/python3 指向 python 3.2(实际上它指向 python3.2mu:如果你可以解释一下为什么包含这个“mu”:))安装ubuntu 安装。 我使用 python3 安装了分发工具,没有任何问题。但是当我用 python33 尝试同样的事情时,它给了我以下错误:

ankur@junk-mechanism:~$ sudo python33 distribute_setup.py
Extracting in /tmp/tmp685lyf
lzma module is not available
not a bzip2 file
gzip module is not available
bad checksum
Traceback (most recent call last):
  File "distribute_setup.py", line 550, in <module>
    sys.exit(main())
  File "distribute_setup.py", line 547, in main
    return _install(tarball, _build_install_args(options))
  File "distribute_setup.py", line 78, in _install
    tar = tarfile.open(tarball)
  File "/opt/python3.3/lib/python3.3/tarfile.py", line 1578, in open
    raise ReadError("file could not be opened successfully" + str(name) + repr(fileobj))
tarfile.ReadError: file could not be opened successfully/home/ankur/distribute-0.6.35.tar.gzNone

所以在 tarfile.py 中,类方法 Tarfile.open 调用了类方法 Tarfile.gzopen,其中导入了模块 gzip:

    try:
        import gzip
        gzip.GzipFile
    except (ImportError, AttributeError):
        raise CompressionError("gzip module is not available")

这里出现的错误是 ImportError,因为 gzip.py 有一个它无法找到的导入 zlib。但即使是其他安装的 python(2.7 和 3.2)也不在各自的标准库 /usr/lib/pythonx.x/lib/ 中包含 zlib。那么有什么区别呢?

【问题讨论】:

    标签: python python-import


    【解决方案1】:

    听起来您因为缺少依赖项而没有构建所有内容。您可以尝试获取缺少的依赖项并重新构建。为了获得缺少的依赖项,我只需要按照 Python 3.2 的要求工作即可:

    sudo apt-get build-dep python3
    

    然后你可以重新配置和重建 Python 3.3 以获得所有需要的模块。

    另一种选择是使用死蛇 ppa:

    sudo add-apt-repository ppa:fkrull/deadsnakes
    sudo apt-get update
    sudo apt-get install python3.3
    

    我通常也会安装 -dev 包,以便我可以安装具有 C 扩展模块的包:

    sudo apt-get install python3.3-dev
    

    【讨论】:

    • 感谢您的帮助。我指的是你的第一个建议。为 3.2 构建依赖项将如何帮助我重新配置 3.3。我是新来的。任何指针都会有所帮助。谢谢
    • 另外,如果你有两个不同的安装,一个 3.3 和一个 3.3-dev,你如何确保具有 C 扩展模块的包在安装后对 3.3 可用?
    • 抱歉拖了这么久......不得不工作。 :-) 你说过你构建了 Python 3.3。 apt-get build-dep python3 将确保您的系统安装了所有必要的依赖项,以便在您运行 ./configuremake 时,将找到所有位并构建完整的扩展套件。
    • sudo apt-get install python3.3 安装基础 python 包。不幸的是,开发标头和其他一些位被遗漏了。要获得这些,您必须安装python3.3-dev。任何想要构建 C 扩展模块的东西都需要开发头文件来构建。所以我说的不是两种不同的装置。它是基础包加上开发位。我不确定我是否理解你的最后一个问题。也许你可以详细说明一下?
    • 谢谢。我的印象是 3.3 和 3.3-dev 将是两个不同的安装。但是你的解释很有帮助。我也成功安装了distribute_tools。但我很好奇这些头文件在哪里以及如何安装和提供。 python dir 结构中的 include 文件夹具有与安装 dev 包之前相同数量的文件。我想我的问题对于 linux 的行为比 python 本身更重要。还是我摆弄错了屋顶?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多