簡體   English   中英

為什么可嵌入的 Python 發行版無法定位原生模塊?

[英]Why can't the embeddable Python distribution locate native modules?

我正在嘗試為 Windows 構建 WeasyPrint 的獨立發行版。 我將可嵌入的 Python 3.8 ZIP 文件下載並解壓到名為dist的目錄中。 然后,在 MSYS2 中,我使用帶有 Pip 的完整 Python 3.8 解釋器將 WeasyPrint 安裝到dist目錄中(考慮到在 MSYS2 上安裝時 Pillow 中的錯誤):

pip install --target dist --global-option=build_ext --global-option="-ldl" pillow
pip install --target dist weasyprint

現在,當我運行 WeasyPrint 時:

./dist/python.exe -m weasyprint http://weasyprint.org test.pdf

我得到:

Traceback (most recent call last):
  File "runpy.py", line 184, in _run_module_as_main
  File "runpy.py", line 143, in _get_module_details
  File "runpy.py", line 110, in _get_module_details
  File "C:\msys64\home\David\dist\weasyprint\__init__.py", line 440, in <module>
    from .css import preprocess_stylesheet  # noqa isort:skip
  File "C:\msys64\home\David\dist\weasyprint\css\__init__.py", line 30, in <module>
    from . import computed_values, media_queries
  File "C:\msys64\home\David\dist\weasyprint\css\computed_values.py", line 18, in <module>
    from .. import text
  File "C:\msys64\home\David\dist\weasyprint\text.py", line 14, in <module>
    import cairocffi as cairo
  File "C:\msys64\home\David\dist\cairocffi\__init__.py", line 17, in <module>
    from ._generated.ffi import ffi
  File "C:\msys64\home\David\dist\cairocffi\_generated\ffi.py", line 2, in <module>
    import _cffi_backend
ModuleNotFoundError: No module named '_cffi_backend'

Python 如何能夠找到其他模塊,而不是本機模塊? dist目錄中有一個名為_cffi_backend-cpython-38.dll的文件。 如果我將文件重命名為_cffi_backend.dll它仍然不起作用。

正如 Smankusors 在評論中提到的,這是由 MSYS2 Python 和可嵌入 Python 對擴展模塊使用不同后綴引起的:

可嵌入的 Python:

$ ./dist/python.exe -c 'from importlib.machinery import EXTENSION_SUFFIXES; print(EXTENSION_SUFFIXES)'
['.cp38-win_amd64.pyd', '.pyd']

MSYS2 Python:

$ python -c 'from importlib.machinery import EXTENSION_SUFFIXES; print(EXTENSION_SUFFIXES)'
['-cpython-38.dll', '-abi3.dll', '.cp38.pyd', '.pyd']

所以當CFFI輪用MSYS2 Python構建時,使用了MSYS2 Python后綴,但是Embeddable Python不知道去尋找它。 修復方法是重命名 DLL 以使用可嵌入 Python 后綴之一或使用 Python 的本機 Windows 安裝來安裝模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM