【问题标题】:pyenv zlib error on MacOS:MacOS 上的 pyenv zlib 错误:
【发布时间】:2018-10-06 17:54:32
【问题描述】:

我的目标

我正在尝试使用 pyenv 在我的 MBP 上并排安装 Python 2.7.5 和 3.6.5。

pyenv安装

按照How can I use Homebrew to install both Python 2 and 3 on Mac?,我试过了:

$ pyenv install 3.6.5

错在:

python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...
python-build: use readline from homebrew

BUILD FAILED (OS X 10.13.4 using python-build 20160602)

Inspect or clean up the working tree at /var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709
Results logged to /var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709.log

Last 10 log lines:
  File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/d0/t8d3jjp161g2dyrd4k67ypc80000gn/T/python-build.20180426091253.34709/Python-3.6.5/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

我尝试了什么

  • 安装zlib:brew install zlib

我的问题

如何在 MBP 上使用pyenv 安装多个 Python 环境?

【问题讨论】:

    标签: xcode macos zlib pyenv


    【解决方案1】:

    在 Mojave 上,安装 Xcode 命令行工具后,必须运行以下命令:

    sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
    

    【讨论】:

    • 谢谢@samsin。在花了几个小时之后,这为我解决了这个问题。 OP 应该已将其标记为正确答案。
    • 谢谢,这是一个非常有用的答案,大多数其他 cmets 反映了 Mojave 之前 Mac OS 的问题
    • 我能问一下你到底是怎么想出这样做的@samsin?
    • 对于其他任何使用 Mojave 并且可能仍有问题的人,请参阅此 github 问题 - github.com/pyenv/pyenv/issues/1219
    • 2020 El Capitan 这个答案不再适用,stackoverflow.com/a/54955286/5847511 是使用的解决方案!
    【解决方案2】:
    brew install zlib
    export LDFLAGS="-L/usr/local/opt/zlib/lib"
    export CPPFLAGS="-I/usr/local/opt/zlib/include"
    pyenv install 3.7.2
    

    Samsin 的回答对我不起作用。我没有Packages 目录

    【讨论】:

    • 这就是我在 Big Sur 上运行“pyenv install”所必须做的事情
    【解决方案3】:

    在 MacOS 11.1 (Big Sur) 上我最终需要:

    brew install bzip2
    export LDFLAGS="-L $(xcrun --show-sdk-path)/usr/lib -L brew --prefix bzip2/lib"
    export CFLAGS="-L $(xcrun --show-sdk-path)/usr/include -L brew --prefix bzip2/include"
    pyenv install 3.9.0
    

    我在 ./bash_profile 中添加了导出命令,所以下次如果需要安装更多版本,我可以使用 pyenv。

    密切关注:https://github.com/pyenv/pyenv/issues/1643 跟踪此问题,希望这将在 pyenv 中修复。

    【讨论】:

    • 我认为你需要使用brew --prefix bzip2命令的输出:export LDFLAGS="-L $(xcrun --show-sdk-path)/usr/lib -L $(brew --prefix bzip2)/lib"export CFLAGS="-L $(xcrun --show-sdk-path)/usr/include -L $(brew --prefix bzip2)/include"
    【解决方案4】:

    我在这里尝试了所有解决方案,但没有成功。

    这就是我在 MacOs 11.2.1 (Big Sur) 上的工作方式:

    export MACOSX_DEPLOYMENT_TARGET=11.0
    brew install pyenv bzip2 zlib xz openssl@1.1
    
    ## 3.6.8
    CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.8 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
    
    ## 3.6.12
    CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.12 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
    
    ## 3.7.9
    CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install 3.7.9
    

    解决方案取自this gist

    【讨论】:

      【解决方案5】:

      pyenv wiki 有一个专门针对常见构建问题的页面。 missing zlib error 提到了一些可能的解决方案。

      我有同样的 ZipImportError 但使用以下命令安装成功:

      CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.6.5
      

      【讨论】:

      【解决方案6】:

      为了获得带有tkinter 的Python 3.8.6,我在Vincent Gerris 的回答和this blog post 的基础上构建,并通过

      brew install bzip2
      export LDFLAGS="-L $(xcrun --show-sdk-path)/usr/lib -L brew --prefix bzip2/lib"
      export CFLAGS="-L $(xcrun --show-sdk-path)/usr/include -L brew --prefix bzip2/include"
      export PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6' --enable-framework"
      pyenv install 3.8.6
      

      【讨论】:

        【解决方案7】:

        以下内容适用于 macOS Big Sur (11.6.1):

        brew update
        brew install bzip2
        echo 'export PATH="/usr/local/opt/bzip2/bin:$PATH"' >> ~/.zshrc
        export LDFLAGS="-L/usr/local/opt/zlib/lib"
        export CPPFLAGS="-I/usr/local/opt/zlib/include"
        pyenv install 3.8.6
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-04
          • 1970-01-01
          • 2023-02-04
          • 2023-02-22
          • 2022-09-29
          • 2015-06-11
          • 1970-01-01
          相关资源
          最近更新 更多