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

hpcdzsge  于 2023-06-28  发布在  Python
关注(0)|答案(9)|浏览(409)

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

❯ python
>>> import lzma

ModuleNotFoundError: No module named '_lzma'

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

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

唯一需要注意的是,homebrew会将软件包安装到~/.brew
任何输入都是赞赏的。

7uhlpewt

7uhlpewt1#

以前的答案都不适合我。this gist中的说明对我很有效。
简而言之:您可能会丢失xz库,在这种情况下,您可以使用Homebrew安装它们,然后从pyenv重新安装/重建Python版本:

$  brew install xz
$  pyenv uninstall <desired-python-version>
$  pyenv install <desired-python-version>
  • 注意:我只在pyenv安装的Python上遇到了这个问题,而不是Mac系统的Python或conda Python。最好使用brewed python(brew install python),除非你对pyenv有特定的需求(比如需要更多地控制python版本/更新)。
hl0ma9xz

hl0ma9xz2#

基于pyenv wiki,您应该安装带有--enable-framework标志的 python 版本。对我来说确实有效。

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

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

zhte4eai

zhte4eai3#

这为我解决了:

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
vfwfrxfs

vfwfrxfs4#

Google总是把我带到这个线程,但一个很好的答案是在here
简单地说,你需要做:

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

如果你是一个M1用户,这将为您工作下rosetta。
框架构建不适合我。

jmo0nnb3

jmo0nnb35#

最后发现。这个问题 * 仅 * 在将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。大概是因为它是不需要的 * 如果 * 家酿生活在它期望的地方。

3z6pesqy

3z6pesqy6#

39430期?

我不知道答案但这个症状听起来像这个Python bug:

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

csvkit包的解决方法:试试python 2

我在运行MobaXterm的Windows 10上尝试使用package csvkit时遇到了这个问题:
软件包安装得很好,但是/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'
✘

我的解决方法是使用python 2。不是很满意。
首先,像这样抛出不工作的python3版本:

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

$ hash -r
✔

$ csvstat --version
csvstat: command not found
✘

所以现在没了。让我们再试一次,但是使用python 2:

$ /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”错误。但不幸的是,在Python 2上,而不是Python 3上。--这个解决方案对我来说已经足够好了,因为我只是想要/bin/csv* 实用程序,但对于那些真正需要在python3上运行的人来说可能没用。

xe55xuns

xe55xuns7#

这里的很多答案都需要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或您想要的任何版本安装Python。
b1uwtaje

b1uwtaje8#

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

asdf uninstall python

asdf install python latest

install命令的输出示例:

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
1l5u6lss

1l5u6lss9#

错误信息

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

解决方案

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

原环境(出现错误的环境)

  • Linux 4.4.0-62-通用
  • Python 2.7
  • Python 3.4
  • Python 3.5
  • Python 3.6
  • Python 3.8

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

  • Linux 4.4.0-62-通用
  • Python 2.7
  • Python 3.5

相关问题