LoginSignup
3
0

More than 5 years have passed since last update.

py-gfm (GithubFlavoredMarkdownExtension) が import できない時の対処法[Python3]

Last updated at Posted at 2018-09-23

jupyter notebook 上で @driller 3 により公開されている tsumiki を試す過程で、py-gfm (GithubFlavoredMarkdownExtension) を import できない事象にあたったので対処した方法をまとめる

環境

  • MacOS High Sierra
  • Python 3.6.5

事象

  • https://pythonhosted.org/py-gfm/ で紹介されている Quick start のコードを実行しても module 'markdown.inlinepatterns' has no attribute 'BRK' というメッセージが出てエラーとなる

結論

pip3 uninstall markdown
pip3 install git+https://github.com/Python-Markdown/markdown.git@regex-fixes

のようにして、git branch を指定して markdown を再インストールすると上手くいった。

仮説・検証

  • https://pythonhosted.org/py-gfm/ で紹介されている Quick start のコードを下記のように実行しても module 'markdown.inlinepatterns' has no attribute 'BRK' というメッセージが出てエラーとなった

実行コード

python3
    import markdown
    from mdx_gfm import GithubFlavoredMarkdownExtension

    source = """
    Hello, *world*! This is a ~~good~~marvelous day!
    Here is an auto link: https://example.org/

    Le me introduce you to [task lists] (https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments):

    - [ ] eggs
    - [x] milk

    You can also have fenced code blocks:
    ```
    import this
    ```
    """

    # Direct conversion
    html = markdown.markdown(source,
                             extensions=[GithubFlavoredMarkdownExtension()])

    # Factory-like
    md = markdown.Markdown(extensions=[GithubFlavoredMarkdownExtension()])
    html = md.convert(source)
result
    ---------------------------------------------------------------------------

    ModuleNotFoundError                       Traceback (most recent call last)

    <ipython-input-1-000efe484076> in <module>()
          1 import markdown
    ----> 2 from mdx_gfm import GithubFlavoredMarkdownExtension
          3 
          4 source = """
          5 Hello, *world*! This is a ~~good~~marvelous day!


    /usr/local/lib/python3.6/site-packages/mdx_gfm/__init__.py in <module>()
         25 from markdown.extensions.nl2br import Nl2BrExtension
         26 
    ---> 27 from mdx_partial_gfm import PartialGithubFlavoredMarkdownExtension
         28 
         29 


    /usr/local/lib/python3.6/site-packages/mdx_partial_gfm/__init__.py in <module>()
         28 from markdown.extensions import Extension
         29 from markdown.extensions.fenced_code import FencedCodeExtension
    ---> 30 from markdown.extensions.smart_strong import SmartEmphasisExtension
         31 from markdown.extensions.tables import TableExtension
         32 


    ModuleNotFoundError: No module named 'markdown.extensions.smart_strong'

まずは、py-gfm が markdown を呼び出す事ができているのかを確認するためにインタプリタから下記を確認した。

python3
import markdown

markdown.inlinepatterns
result
<module 'markdown.inlinepatterns' from '/usr/local/lib/python3.6/site-packages/markdown/inlinepatterns.py'>

markdown 自体は普通に import できていそう。という事で github のコードを読む

... どこにもエラーメッセージにある BRK なんてないやんけ。そりゃ動かん。
エラー発生行の次の行の NOIMG ってのはあったので、試しに markdown.inlinepatterns.NOIMG を実行してみる。

python3
markdown.inlinepatterns.NOIMG
result
'(?<!\\!)'

うん、動きますね。

py-gfm の問題というより、import markdown 時点で問題がありそうだ。
試しに markdown を再インストール。

bash
$ pip3 install markdown
$ pip3 uninstall markdown
python3
import markdown

markdown.inlinepatterns.BRK
result
    ---------------------------------------------------------------------------

    AttributeError                            Traceback (most recent call last)

    <ipython-input-2-58535ab67692> in <module>()
          1 import markdown
          2 
    ----> 3 markdown.inlinepatterns.BRK


    AttributeError: module 'markdown.inlinepatterns' has no attribute 'BRK'

ダメですね orz

別途気づいた所として github の 別ブランチには BRK の定義あり。

ブランチ指定して install すればうまく行くのではないかな。

pip3 uninstall markdown
pip3 install git+https://github.com/Python-Markdown/markdown.git@2.6
import markdown

markdown.inlinepatterns.BRK
'\\[([^\\]\\[]*(\\[[^\\]\\[]*(\\[[^\\]\\[]*(\\[[^\\]\\[]*(\\[[^\\]\\[]*(\\[[^\\]\\[]*(\\[[^\\]\\[]*\\])*[^\\]\\[]*\\])*[^\\]\\[]*\\])*[^\\]\\[]*\\])*[^\\]\\[]*\\])*[^\\]\\[]*\\])*[^\\]\\[]*)\\]'

動いた。ということは最初の Quick start を再度実行すると...

python3
    import markdown
    from mdx_gfm import GithubFlavoredMarkdownExtension

    source = """
    Hello, *world*! This is a ~~good~~marvelous day!
    Here is an auto link: https://example.org/

    Le me introduce you to [task lists] (https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments):

    - [ ] eggs
    - [x] milk

    You can also have fenced code blocks:
    ```
    import this
    ```
    """

    # Direct conversion
    html = markdown.markdown(source,
                             extensions=[GithubFlavoredMarkdownExtension()])

    # Factory-like
    md = markdown.Markdown(extensions=[GithubFlavoredMarkdownExtension()])
    html = md.convert(source)

-> エラー発生なし。とりあえず解決。

おまけ(tsumikiとは)

tsumikiとは先日の pycon 2018 に登壇された @driller 3 により公開されているライブラリで、jupyter notebook で Markdown と HTML を組み合わせて表示したり、段組にして表示したりする事ができます。

使用例

%load_ext tsumiki
jupyter-notebook_markdown_cell
%%tsumiki

:Markdown:
# Title

:HTML:::
<p>col0</p>
<font color="red">Red</font>
</br>
<font color="green">Green</font>

:Markdown:::
col1
* list1
* list2

:Markdown:::
col2
* list1
* list2

実行結果

image.png

装飾や、段組にして何かの diff を見せたい時など非常に便利そうです ☺️

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0