[英]Python 2.7.3 - ImportError: No module named PyInstaller
[英]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 进行“额外”操作。
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 版本发布时,此处的更改将可用,您可以将markdown.extensions.md_in_html
添加到扩展列表中。 那时,您将获得所有extra
而根本不需要包含extra
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.