无法通过pip安装xmlsec

12

在运行 pip install xmlsec 在 macOS Big Sur 11.3.1 上时,我遇到了以下问题:

Building wheels for collected packages: xmlsec
  Building wheel for xmlsec (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/davidmasip/.pyenv/versions/3.9.9/bin/python3.9 /Users/davidmasip/.pyenv/versions/3.9.9/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/tmpm51b1yso
       cwd: /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d
  Complete output (65 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.macosx-11.3-x86_64-cpython-39
  creating build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/py.typed -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/tree.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/__init__.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/constants.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  copying src/xmlsec/template.pyi -> build/lib.macosx-11.3-x86_64-cpython-39/xmlsec
  running build_ext
  building 'xmlsec' extension
  creating build/temp.macosx-11.3-x86_64-cpython-39
  creating build/temp.macosx-11.3-x86_64-cpython-39/private
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d
  creating build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src
  clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -D__XMLSEC_FUNCTION__=__func__ -DXMLSEC_NO_FTP=1 -DXMLSEC_NO_MD5=1 -DXMLSEC_NO_GOST=1 -DXMLSEC_NO_GOST2012=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -DXMLSEC_CRYPTO_OPENSSL=1 -DMODULE_NAME=xmlsec -DMODULE_VERSION=1.3.13 -I/usr/local/Cellar/libxmlsec1/1.3.0/include/xmlsec1 -I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/openssl@1.1/include/openssl -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml/includes -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml/includes/libxml -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml/includes/libxslt -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml/includes/libexslt -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml/includes/extlibs -I/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-build-env-gsnsoluq/overlay/lib/python3.9/site-packages/lxml/includes/__pycache__ -I/Users/davidmasip/.pyenv/versions/3.9.9/include/python3.9 -c /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/constants.c -o build/temp.macosx-11.3-x86_64-cpython-39/private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/constants.o -g -std=c99 -fPIC -fno-strict-aliasing -Wno-error=declaration-after-statement -Werror=implicit-function-declaration -Os
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/constants.c:319:5: error: use of undeclared identifier 'xmlSecSoap11Ns'
      PYXMLSEC_ADD_NS_CONSTANT(Soap11Ns, "SOAP11");
      ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/constants.c:304:46: note: expanded from macro 'PYXMLSEC_ADD_NS_CONSTANT'
      tmp = PyUnicode_FromString((const char*)(JOIN(xmlSec, name))); \
                                               ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/common.h:19:19: note: expanded from macro 'JOIN'
  #define JOIN(X,Y) DO_JOIN1(X,Y)
                    ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/common.h:20:23: note: expanded from macro 'DO_JOIN1'
  #define DO_JOIN1(X,Y) DO_JOIN2(X,Y)
                        ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/common.h:21:23: note: expanded from macro 'DO_JOIN2'
  #define DO_JOIN2(X,Y) X##Y
                        ^
  <scratch space>:23:1: note: expanded from here
  xmlSecSoap11Ns
  ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/constants.c:320:5: error: use of undeclared identifier 'xmlSecSoap12Ns'; did you mean 'xmlSecXPath2Ns'?
      PYXMLSEC_ADD_NS_CONSTANT(Soap12Ns, "SOAP12");
      ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/constants.c:304:46: note: expanded from macro 'PYXMLSEC_ADD_NS_CONSTANT'
      tmp = PyUnicode_FromString((const char*)(JOIN(xmlSec, name))); \
                                               ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/common.h:19:19: note: expanded from macro 'JOIN'
  #define JOIN(X,Y) DO_JOIN1(X,Y)
                    ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/common.h:20:23: note: expanded from macro 'DO_JOIN1'
  #define DO_JOIN1(X,Y) DO_JOIN2(X,Y)
                        ^
  /private/var/folders/ff/3y2196b13bq0nbm3_ms25nyh0000gp/T/pip-install-qm2a1dud/xmlsec_cd7a81ea26444cc4b8ae24acd3ec379d/src/common.h:21:23: note: expanded from macro 'DO_JOIN2'
  #define DO_JOIN2(X,Y) X##Y
                        ^
  <scratch space>:25:1: note: expanded from here
  xmlSecSoap12Ns
  ^
  /usr/local/Cellar/libxmlsec1/1.3.0/include/xmlsec1/xmlsec/strings.h:34:33: note: 'xmlSecXPath2Ns' declared here
  XMLSEC_EXPORT_VAR const xmlChar xmlSecXPath2Ns[];
                                  ^
  2 errors generated.
  error: command '/usr/bin/clang' failed with exit code 1
  ----------------------------------------
  ERROR: Failed building wheel for xmlsec
Failed to build xmlsec
ERROR: Could not build wheels for xmlsec which use PEP 517 and cannot be installed directly
WARNING: You are using pip version 21.2.4; however, version 23.0.1 is available.
You should consider upgrading via the '/Users/davidmasip/.pyenv/versions/3.9.9/bin/python3.9 -m pip install --upgrade pip' command.

我以前也跑过。
brew install libxml2 libxmlsec1 pkg-config xz

我得到:
Warning: libxml2 2.10.4 is already installed and up-to-date.
To reinstall 2.10.4, run:
  brew reinstall libxml2
Warning: libxmlsec1 1.3.0 is already installed and up-to-date.
To reinstall 1.3.0, run:
  brew reinstall libxmlsec1
Warning: pkg-config 0.29.2_3 is already installed and up-to-date.
To reinstall 0.29.2_3, run:
  brew reinstall pkg-config
Warning: xz 5.4.2 is already installed and up-to-date.
To reinstall 5.4.2, run:
  brew reinstall xz

如何在 macOS 上安装 xmlsec?
4个回答

27

编辑

这个GitHub评论是最简单的修复。

https://github.com/xmlsec/python-xmlsec/issues/254#issuecomment-1612005910


libxmlsec1 升级到 v1.3 时,pip install xmlsec 就无法正常工作了。

https://github.com/xmlsec/python-xmlsec/issues/254

我正在使用一台搭载苹果芯片(M1 / M2)的Macbook,并且花了一些时间才找到解决方法。
我通过Homebrew公式的黑客方式成功解决了这个问题,具体方法可以参考这个评论,作者是@dpritchetthttps://raw.githubusercontent.com/Homebrew/homebrew-core/7f35e6ede954326a10949891af2dba47bbe1fc17/Formula/libxmlsec1.rb
具体的解决步骤:
  1. brew edit libxmlsec1。编辑器会打开,里面是从GitHub或其他地方下载的最新的xmlsec公式的内容
  2. 我粘贴上一个1.3.0版本之前的brew公式的内容,并保存
  3. 安装本地公式:brew install /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/libxmlsec1.rb
  4. pip install xmlsec

~~编辑~~

请参阅下方的评论以及GitHub问题上的评论,了解与您使用的Homebrew版本相关的解决方法的更多信息。

https://github.com/xmlsec/python-xmlsec/issues/254#issuecomment-1522646438


3
在我的情况下,公式的路径是/opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/libxmlsec1.rb - Underyx
同样在这里,路径为 /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/libxmlsec1.rb - Gudlaugur Egilsson
此外,在重新安装1.2.37之前,我需要卸载libxmlsec1。brew uninstall libxmlsec1您可能希望将其作为答案中的一步添加。 - Gudlaugur Egilsson
我曾经为这个错误苦苦挣扎。谢谢! - Anton Koval'

9

有另一种安装较早版本的libxmlsec1的方法,不需要使用brew edit由D3X编写

一个“更好”的(更干净的)解决方法是创建一个本地tap并提取先前的版本,就像这样:

brew tap-new $USER/local
brew extract --version=1.2.37 libxmlsec1 $USER/local
brew uninstall libxmlsec1
brew install $USER/local/libxmlsec1@1.2.37

一旦python-xmlsec更新以支持libxmlsec1 1.3+,您可以通过执行以下操作卸载提取的版本并删除tap:
brew uninstall $USER/local/libxmlsec1@1.2.37
brew untap $USER/local

这在M2上运行成功!非常感谢! - tamzi

3

回答由@Dag Høidahl几乎对我有用。然而,:

brew install $USER/local/libxmlsec1@1.2.37

命令失败,返回404错误。
Error: libxmlsec1@1.2.37: Failed to download resource "libxmlsec1@1.2.37"
Failure while executing; `/usr/bin/env /opt/homebrew/Library/Homebrew/shims/shared/curl --disable --cookie /dev/null --globoff --show-error --user-agent Homebrew/4.0.28-7-gcb61785\ \(Macintosh\;\ arm64\ Mac\ OS\ X\ 13.4.1\)\ curl/7.88.1 --header Accept-Language:\ en --retry 3 --fail --location --silent --head --request GET https://www.aleksey.com/xmlsec/download/xmlsec1-1.2.37.tar.gz` exited with 22. Here's the output:
curl: (22) The requested URL returned error: 404
HTTP/1.1 404 Not Found
...

我不得不手动修补公式才能使其正常工作。我从这个命令中获取了公式的路径:
brew extract --version=1.2.37 libxmlsec1 $USER/local
==> Searching repository history
==> Writing formula for libxmlsec1 from revision 17a2c4d to:
/opt/homebrew/Library/Taps/user/homebrew-local/Formula/libxmlsec1@1.2.37.rb # <- path to the formula

然后我更新了文件,并替换了以下行:

url "https://www.aleksey.com/xmlsec/download/xmlsec1-1.2.37.tar.gz"

使用:

url "https://www.aleksey.com/xmlsec/download/older-releases/xmlsec1-1.2.37.tar.gz"

所以重新运行brew install $USER/local/libxmlsec1@1.2.37就可以了。

1
由于python-xmlsec尚未更新以支持libxmlsec1@1.3,创建一个本地tap的libxmlsec1@1.2.37并安装它仍然是解决此问题的最佳方法。然而,在使用@Dag Høidahl提到的解决方案时,我遇到了一些问题。
  1. 当运行brew tap-new $USER/local时,出现Invalid tap name的错误。我的$USER中有一个.,使其成为无效的tap名称,因此我不得不手动设置一个名称。
  2. 当运行brew install $USER/local/libxmlsec1@1.2.37时,出现curl: (22) The requested URL returned error: 404的错误。随着版本1.2.38的发布,brew下载的xmlsec tarball已经移动到older-releases目录中,因此我需要在libxmlsec1.rb文件中更改URL。

这是对我有效的更新版本:

MYNAME=neruson
brew tap-new $MYNAME/local
brew extract --version=1.2.37 libxmlsec1 $MYNAME/local
sed -i '' 's^/xmlsec/download/^/xmlsec/download/older-releases/^g' /opt/homebrew/Library/Taps/$MYNAME/homebrew-local/Formula/libxmlsec1@1.2.37.rb
brew uninstall libxmlsec1
brew install $MYNAME/local/libxmlsec1@1.2.37

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接