Pyenv 的 python 缺少 bzip2 模块

lui*_*lhl 5 python bzip2 pyenv

我使用 pyenv 来安装 python 3.8.2 并创建一个 virtualenv。在 virtualenv 中,我使用 pipenv 来安装pandas.

但是,在导入熊猫时,我得到以下信息:

  [...]
  File "/home/luislhl/.pyenv/versions/poc-prefect/lib/python3.8/site-packages/pandas/io/common.py", line 3, in <module>
    import bz2
  File "/home/luislhl/.pyenv/versions/3.8.2/lib/python3.8/bz2.py", line 19, in <module>
    from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2'
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索,我发现有些人建议我在系统中安装 bzip2 库后从源代码重建 Python。

但是,在尝试安装它后,sudo dnf install bzip2-devel我发现我已经安装了它。

据我所知,pyenv 在安装某个版本时从源代码构建 python。那么,为什么它不能在构建时包含 bzip2 模块呢?

如何使用 pyenv 重建 Python 以使 bzip2 可用?我在 Fedora 30

提前致谢

更新 我尝试在详细模式下使用 pyenv 安装另一个版本的 python,以查看编译输出。

编译的最后有这个信息:

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
Run Code Online (Sandbox Code Playgroud)

但正如我之前所说,我检查过我的系统中已经安装了 bzip2。所以我不知道该怎么办。

Jan*_*ang 77

在 Ubuntu 22 LTS 上

使用 Pyenv 安装 Python 时缺少库问题

修复前:

$> pyenv install 3.11.0
Run Code Online (Sandbox Code Playgroud)

命令结果:

pyenv: /home/user/.pyenv/versions/3.11.0 already exists
continue with installation? (y/N) y
Downloading Python-3.11.0.tar.xz...
-> https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz


Installing Python-3.11.0...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?

Run Code Online (Sandbox Code Playgroud)

太长了;

解决方法:

$> pyenv install 3.11.0
Run Code Online (Sandbox Code Playgroud)

结果

修复后:

pyenv: /home/user/.pyenv/versions/3.11.0 already exists
continue with installation? (y/N) y
Downloading Python-3.11.0.tar.xz...
-> https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz


Installing Python-3.11.0...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?

Run Code Online (Sandbox Code Playgroud)

命令结果:

pyenv: /home/user/.pyenv/versions/3.11.0 already exists
continue with installation? (y/N) y
Downloading Python-3.11.0.tar.xz...
-> https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz
Installing Python-3.11.0...
Installed Python-3.11.0 to /home/user/.pyenv/versions/3.11.0
Run Code Online (Sandbox Code Playgroud)

  • 仅此命令行是不够的(至少对我来说)。您还应该使用以下命令安装 tkinter:`sudo apt-get install python-tk python3-tk tk-dev` 并将 ncurses 库添加到之前的 cmd:`sudo apt-get install build-essential zlib1g-dev libffi-dev libssl -dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev libncurses-dev` (15认同)

小智 12

在 macOS Big Sur 上,为了让 pyenv(通过 homebrew)工作,我必须通过 homebrew 安装 zlib 和 bzip2,然后在我的 ~/.zshrc (或 ~/.bashrc 我猜是 bash )中添加导出。luislhl上面的答案为我的解决方案指明了方向。

brew install zlib bzip2

#Add the following to your ~/.zshrc
# For pyenv to build
export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include"

# Then the install worked
pyenv install 3.7.9
Run Code Online (Sandbox Code Playgroud)

  • CPPFLAGS 中有一个拼写错误。包含文件夹应该是“bzip2”,而不是“bzip3” (3认同)