我在尝试让 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.tables”,而是使用“markdown.extensions.extra”,使用 pyinstaller 编译并运行它,它会以缺少的“fenced_code”模块作为响应。基本上,似乎我必须避免使用 pyinstaller 进行“额外”操作。