Pyinstaller和Python Markdown-ImportError:没有名为';额外';

Pyinstaller和Python Markdown-ImportError:没有名为';额外';,python,markdown,pyinstaller,python-markdown,Python,Markdown,Pyinstaller,Python Markdown,我在尝试让python标记在pyinstaller中工作时遇到了一个问题。我有以下代码来演示名为test.py的文件中的问题: import markdown testMarkdown = "blahdy blah blah" print(markdown.markdown(testMarkdown)) print(markdown.markdown(testMarkdown, extensions=["extra"])) 当我使用python3运行它时,我得到了所需的: (venv) C:

我在尝试让python标记在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>
然后运行生成的代码,得到以下结果:

(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
但是我收到了同样的错误信息

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

其他信息:

“额外”扩展可能是导致问题的原因。Per,“extra”是多个扩展的汇编,包括fenced_代码和表。如果我只是尝试单独使用tables扩展,pyinstaller工作如果我使用全名,如下所示:

(venv) C:\Users\madgrizzle>pyinstaller test.py
markdown.markdown(testMarkdown, extensions=["markdown.extensions.tables"])

如果不是使用“markdown.extensions.tables”,而是使用“markdown.extensions.extra”,则使用pyinstaller编译并运行它,它会返回缺少的“fenced_code”模块。基本上,我似乎必须避免pyinstaller的“额外”功能。

extra
table
这样的扩展名都是setuptools入口点。我认为pyinstaller不能很好地处理入口点。因此,您需要为所有扩展使用完整的可导入字符串名称

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

markdown.markdown(
测试降价,
扩展=[
“markdown.extensions.abbr”,
“markdown.extensions.attr_列表”,
“markdown.extensions.def_列表”,
“markdown.extensions.fenced_代码”,
“降价.扩展.脚注”,
“markdown.extensions.tables”
]
)

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

感谢您的回复,这很有帮助。
markdown.markdown(testMarkdown, extensions=["markdown.extensions.tables"])