Pyinstaller and Python-Markdown - ImportError: no module named 'extra'
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
但我收到相同的错误消息。
包含 markdown 扩展需要什么特别的东西吗?
附加信息:
看来问题可能是 'extra' 扩展。每 https://python-markdown.github.io/extensions/extra/,'extra' 是多个扩展的汇编,包括 fenced_code 和表格。如果我只是尝试单独使用表扩展,pyinstaller 工作 IF 我使用全名如下:
markdown.markdown(testMarkdown, extensions=["markdown.extensions.tables"])
如果我不使用 'markdown.extensions.tables' 而使用 'markdown.extensions.extra',使用 pyinstaller 编译,然后 运行 它,它会返回缺少的 "fenced_code" 模块。基本上,我似乎必须避免使用 pyinstaller 'extra'。
extra
和 table
等扩展的简称是 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 版发布时,更改 here 将可用,您可以将 markdown.extensions.md_in_html
添加到扩展列表中。到那时,您将获得所有 extra
,而根本不需要包含 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
但我收到相同的错误消息。
包含 markdown 扩展需要什么特别的东西吗?
附加信息:
看来问题可能是 'extra' 扩展。每 https://python-markdown.github.io/extensions/extra/,'extra' 是多个扩展的汇编,包括 fenced_code 和表格。如果我只是尝试单独使用表扩展,pyinstaller 工作 IF 我使用全名如下:
markdown.markdown(testMarkdown, extensions=["markdown.extensions.tables"])
如果我不使用 'markdown.extensions.tables' 而使用 'markdown.extensions.extra',使用 pyinstaller 编译,然后 运行 它,它会返回缺少的 "fenced_code" 模块。基本上,我似乎必须避免使用 pyinstaller 'extra'。
extra
和 table
等扩展的简称是 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 版发布时,更改 here 将可用,您可以将 markdown.extensions.md_in_html
添加到扩展列表中。到那时,您将获得所有 extra
,而根本不需要包含 extra
。