簡體   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