繁体   English   中英

ModuleNotFoundError:在 macos 上使用 pyenv 构建 python 时没有名为“_lzma”的模块

[英]ModuleNotFoundError: No module named '_lzma' when building python using pyenv on macos

尝试使用 pyenv 在 macOS 上构建 python 版本,但我所做的每次安装都以

❯ python
>>> import lzma

ModuleNotFoundError: No module named '_lzma'

我已经安装了以下所有软件包:

brew install openssl readline sqlite3 xz zlib
xcode-select --install

唯一需要注意的是 homebrew 将软件包安装到~/.brew

任何输入表示赞赏。

基于pyenv wiki ,您应该使用--enable-framework标志安装所需的python版本。 它确实对我有用。

PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.6.7

原因是您尝试使用的模块是在C中实现的,并且具有共享库的CPython将使用上述标志构建。

之前的答案都不适合我。 这个要点中的说明对我有用。

简而言之:您可能缺少xz库,在这种情况下,您可以使用 Homebrew 安装它们,然后从pyenv重新安装/重建 Python 版本:

$  brew install xz
$  pyenv uninstall <desired-python-version>
$  pyenv install <desired-python-version>

注意:我只对 pyenv 安装的pyenv有这个问题,但 Mac 系统 Python 或conda python 没有这个问题。 最好使用 brewed python ( brew install python ),除非您对 pyenv 有特殊需求(例如需要对pyenv版本/更新进行更多控制)。

终于搞清楚了。 此问题在将 Homebrew 目录从其默认值移动时出现。 正常安装 Homebrew 时不需要这样做。

我将此添加到我的.zshrc (或者,您的.bashrc.bash_profile

export LDFLAGS="-L/Users/pcosta/.brew/opt/xz/lib $LDFLAGS"
export CPPFLAGS="-I/Users/pcosta/.brew/opt/xz/include $CPPFLAGS"
export PKG_CONFIG_PATH="/Users/pcosta/.brew/opt/xz/lib/pkgconfig:$PKG_CONFIG_PATH"

Homebrew 警告您应该对其他已安装的软件包执行此操作,但不是 xz。 大概是因为如果Homebrew 生活在预期的地方,则不需要它。

问题 39430?

我没有答案。 但是这个症状听起来像这个 Python 错误票:

于 2020 年报告。不幸的是,截至 2022 年仍未修复。

package“csvkit”的解决方法:尝试 python2

我在运行 MobaXterm 的 Windows 10 上尝试使用package csvkit时遇到了这个问题:

Package 安装得很好,但是 /bin/csv* 工具无法运行:

$ /bin/python3 -m pip install csvkit --quiet
✔

$ csvstat --version
Traceback (most recent call last):
  File "/bin/csvstat", line 5, in <module>
    from csvkit.utilities.csvstat import launch_new_instance
  File "/usr/lib/python3.6/site-packages/csvkit/utilities/csvstat.py", line 12, in <module>
    from csvkit.cli import CSVKitUtility, parse_column_identifiers
  File "/usr/lib/python3.6/site-packages/csvkit/cli.py", line 16, in <module>
    import lzma
  File "/usr/lib/python3.6/lzma.py", line 27, in <module>
    from _lzma import *
ModuleNotFoundError: No module named '_lzma'
✘

我的解决方法是使用 python2。 对此不太满意。

首先像这样扔掉不工作的python3版本:

$ /bin/python3 -m pip uninstall csvkit --quiet --yes
✔

$ hash -r
✔

$ csvstat --version
csvstat: command not found
✘

所以现在它消失了。 让我们再试一次,但使用 python2:

$ /bin/python2 -m pip list | grep -i csv
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
WARNING: You are using pip version 20.3.4; however, version 21.3.1 is available.
You should consider upgrading via the '/bin/python2 -m pip install --upgrade pip' command.
✘

$ /bin/python2 -m pip install csvkit --quiet
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
  WARNING: The scripts csvclean, csvcut, csvformat, csvgrep, csvjoin, csvjson, csvlook, csvpy, csvsort, csvsql, csvstack, csvstat, in2csv and sql2csv are installed in '/usr/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: You are using pip version 20.3.4; however, version 21.3.1 is available.
You should consider upgrading via the '/bin/python2 -m pip install --upgrade pip' command.
✔

$ csvstat --version
csvstat 1.0.7
✔

结果:已安装 csvkit 并且 /bin/csvstat.exe 运行时没有“_lzma”错误。 但不幸的是在python2上而不是在python3上。 -- 这个解决方法对我来说已经足够好了,因为我只想要 /bin/csv* 实用程序,但对于真正需要在 python3 上运行的人来说可能没用。

这为我解决了它:

sudo apt-get install lzma
sudo apt-get install liblzma-dev
sudo apt-get install libbz2-dev

并将这些文件添加到您当前的环境中:例如(参见: https://github.com/pandas-dev/pandas/issues/27532#issuecomment-822272237 ):

sudo cp /usr/lib/python3.8/lib-dynload/_bz2.cpython-38-x86_64-linux-gnu.so/usr/local/lib/python3.8/
sudo cp /usr/lib/python3.8/lib-dynload/_lzma.cpython-38-x86_64-linux-gnu.so /usr/local/lib/python3.8/

或者对我来说:

sudo cp /usr/lib/python3.8/lib-dynload/_bz2.cpython-38-x86_64-linux-gnu.so /home/luca/.asdf/installs/python/3.8.10/lib/python3.8`
sudo cp /usr/lib/python3.8/lib-dynload/_lzma.cpython-38-x86_64-linux-gnu.so /home/luca/.asdf/installs/python/3.8.10/lib/python3.8

谷歌总是把我带到这个线程,但一个很好的答案在这里

简而言之,您需要执行以下操作:

CFLAGS="-I$(brew --prefix xz)/include" LDFLAGS="-L$(brew --prefix xz)/lib" pyenv install 3.9.1

如果您是 M1 用户,这将在 Rosetta 下为您工作。

框架构建对我不起作用。

这里的很多答案都需要brew用于 Mac 开发。 如果您没有brew ,例如当您的开发环境由nix管理时,您可以执行以下操作:

  • https://tukaani.org/xz/下载xz源。
  • 解压到一个目录。
  • 在目录中运行./configure --prefix=~/xz-install (您可以将前缀更改为您想要的任何位置)。 您可能必须事先使用mkdir -p确保该目录存在。
  • 在目录中运行make (注意:您将需要 xcode 命令行工具来编译它)。
  • 运行make install 这将安装到您使用--prefix设置的任何目录。
  • 假设您的--prefix目录设置为~/xz-install/ ,请使用CFLAGS="-I~/xz-install/include" LDFLAGS="-L~/xz-install/lib" pyenv install 3.10.4或任何你想要的版本。

如果您通过asdf安装了 python ,则可以像这样重新安装 Python :

asdf uninstall python

asdf install python latest

install命令的示例 output:

python-build 3.10.6 /Users/u/.asdf/installs/python/3.10.6
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.10.6.tar.xz...
-> https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz
Installing Python-3.10.6...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.10.6 to /Users/u/.asdf/installs/python/3.10.6

错误信息

>>> import lzma
File "/usr/local/lib/python3.5/lzma.py", line 27, in <module>
    from _lzma import *
ModuleNotFoundError: No module named '_lzma'

解决方案

卸载所有版本的 Python3。 然后只重新安装python3.5

原始环境(有错误的环境)

  • Linux 4.4.0-62-通用
  • Python2.7
  • Python3.4
  • Python3.5
  • Python3.6
  • Python3.8

当前环境(没有错误,一切正常)

  • Linux 4.4.0-62-通用
  • Python2.7
  • Python3.5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM