繁体   English   中英

Pyinstaller 和 Python-Markdown - 导入错误:没有名为“额外”的模块

[英]Pyinstaller and Python-Markdown - ImportError: no module named 'extra'

我遇到了一个问题,试图让 python-markdown 在 pyinstaller 中工作。 我有这个代码来演示名为 test.py 的文件中的问题:

import markdown

testMarkdown = "blahdy blah blah"
print(markdown.markdown(testMarkdown))
print(markdown.markdown(testMarkdown, extensions=["extra"]))

当我使用 python3 运行它时,我得到了想要的:

(venv) C:\Users\madgrizzle>python3 test.py
<p>blahdy blah blah</p>
<p>blahdy blah blah</p>

我按如下方式运行 pyinstaller:

(venv) C:\Users\madgrizzle>pyinstaller test.py

并运行生成的代码,我得到以下信息:

(venv) C:\Users\madgrizzle\dist\test>test
<p>blahdy blah blah</p>
Traceback (most recent call last):
  File "test.py", line 5, in <module>
  File "lib\site-packages\markdown\core.py", line 390, in markdown
  File "lib\site-packages\markdown\core.py", line 100, in __init__
  File "lib\site-packages\markdown\core.py", line 126, in registerExtensions
  File "lib\site-packages\markdown\core.py", line 166, in build_extension
  File "importlib\__init__.py", line 126, in import_module
  File "<frozen importlib._bootstrap>", line 985, in _gcd_import
  File "<frozen importlib._bootstrap>", line 968, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
ImportError: No module named 'extra'
[14432] Failed to execute script test

我尝试使用以下方法重建:

(venv) C:\Users\madgrizzle>pyinstaller --hidden-import="markdown.extensions.extra" test.py

但我收到相同的错误消息。

包含降价扩展是否需要一些特殊的东西?

附加信息:

似乎“额外”扩展名可能会导致问题。 根据https://python-markdown.github.io/extensions/extra/ ,'extra' 是多个扩展的编译,包括 fenced_code 和表。 如果我只是试图通过自己使用的表扩展,pyinstaller作品,如果我用全名,如下所示:

markdown.markdown(testMarkdown, extensions=["markdown.extensions.tables"])

如果我使用 'markdown.extensions.extra' 而不是使用 'markdown.extensions.tables',而是使用 pyinstaller 编译并运行它,它会以缺少的“fenced_code”模块作为响应。 基本上,似乎我必须避免使用 pyinstaller 进行“额外”操作。

extratable等扩展的简称是 setuptools 入口点。 我希望 pyinstaller 不能很好地处理入口点。 因此,您需要为所有扩展使用完整的可导入字符串名称。

但是,由于extra在内部使用短名称,这意味着您不能使用extra 您需要通过完整的可导入字符串名称分别调用每个嵌套扩展:

markdown.markdown(
    testMarkdown, 
    extensions=[
        "markdown.extensions.abbr", 
        "markdown.extensions.attr_list", 
        "markdown.extensions.def_list", 
        "markdown.extensions.fenced_code", 
        "markdown.extensions.footnotes", 
        "markdown.extensions.tables"
    ]
)

唯一的问题是你不会得到任何extra特定行为。 但是,当 3.2 版本发布时,此处的更改将可用,您可以将markdown.extensions.md_in_html添加到扩展列表中。 那时,您将获得所有extra而根本不需要包含extra

暂无
暂无

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

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