メインメニューを開く

差分

MediaWikiの「構文ハイライトエラー」

5,483 バイト追加, 2019年7月26日 (金) 13:47
ページの作成:「さくらのレンタルサーバーで最新のMediaWikiを使用していることが前提なんだけど…<br/> 「SyntaxHighlight」を使用すると、「構文…」
さくらのレンタルサーバーで最新のMediaWikiを使用していることが前提なんだけど…<br/>
「SyntaxHighlight」を使用すると、「構文ハイライトエラー」になってしまう…。


原因は単純でさくらのレンタルサーバーのPythonは現時点で2.7…SyntaxHighlightはPython3が前提…<br/>
当然うまく動かないわけです…。


そこで、ホームディレクトリにPython3を入れて、そちらを参照するようにSyntaxHighlightを書き換えちゃいます。

= Python3のインストール =
参考サイトに基づいて、Pythonの最新版(Python3)をインストールしていきます。<br/>
先ずはホームディレクトリに作業用のディレクトリを作成して移動します。
<syntaxhighlight lang="bash">mkdir ~/work
cd work</syntaxhighlight>


次に、wgetコマンドでPythonの公式サイトからモジュールをダウンロードします。
<syntaxhighlight lang="bash">wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz</syntaxhighlight>
(ダウンロードパスは適宜見直してください)


ダウンロードしたらtarコマンドで解凍します。
<syntaxhighlight lang="bash">tar -xzf Python-3.7.4.tar.xz</syntaxhighlight>


解凍すると「Python-3.7.4」ディレクトリが作成されますので、そこに移動します。
<syntaxhighlight lang="bash">cd Python-3.7.4</syntaxhighlight>


以下のコマンドでインストール先を変更します。
<syntaxhighlight lang="bash">./configure --prefix=$HOME/local/python/</syntaxhighlight>


そしたらmakeしてインストールします。
<syntaxhighlight lang="bash">make
make install</syntaxhighlight>


= SyntaxHighlightの編集 =
コードを直接編集するので、バックアップを取りながら進めていきます。


先ずは編集するコードが有るところまで移動します。<br/>
ターゲットは「create_pygmentize_bundle」ファイルです。
<syntaxhighlight lang="bash">cd [MdiaWikiのディレクトリ]/extensions/SyntaxHighlight_GeSHi/pygments</syntaxhighlight>
[MdiaWikiのディレクトリ]は自分の環境に合わせて書き換えてください。


バックアップを作成します。
<syntaxhighlight lang="bash">cp create_pygmentize_bundle create_pygmentize_bundle_bk
mv pygmentize pygmentize_bk</syntaxhighlight>
(「pygmentize」ファイルは作成し直すので、mvしています)


「create_pygmentize_bundle」ファイルを修正します。<br/>
以下の様に修正してください
<syntaxhighlight lang="python" line="line" highlight="1,19,60">#!/home/[userid]/local/python/bin/python3
# -*- coding: utf-8 -*-
"""
Create a standalone, executable 'pygmentize' bundle.
Author: Ori Livneh

"""
import hashlib
import io
import os
import stat
import textwrap
import urllib.request
import xmlrpc.client
import zipfile


PYGMENTIZE_LAUNCHER = textwrap.dedent('''\
#!/home/[userid]/local/python/bin/python3

import sys
import pygments.cmdline
try:
sys.exit(pygments.cmdline.main(sys.argv))
except KeyboardInterrupt:
sys.exit(1)
''')


print('Querying PyPI for the latest Pygments release...')
pypi = xmlrpc.client.ServerProxy('https://pypi.python.org/pypi')
latest_version = pypi.package_releases('Pygments')[0]
url = None
for release in pypi.release_urls('Pygments', latest_version):
if (release['packagetype'] == 'bdist_wheel' and
release['python_version'].startswith('py2')):
url = release['url']
md5_digest = release['md5_digest']
break

if not url:
raise RuntimeError('No suitable package found.')

print('Retrieving version %s (%s)...' % (latest_version, url))
req = urllib.request.urlopen(url)
buf = io.BytesIO(req.read())

print('Verifying...')
if hashlib.md5(buf.getvalue()).hexdigest() != md5_digest:
raise RuntimeError('MD5 checksum mismatch.')

print('Creating executable ZIP bundle...')
with zipfile.ZipFile(buf, 'a') as zf:
zf.writestr('__main__.py', PYGMENTIZE_LAUNCHER)

data = buf.getvalue()
script_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_dir, 'pygmentize')
with open(file_path, 'wb') as f:
f.write(b'#!/home/[userid]/local/python/bin/python3\n')
f.write(data)

file_st = os.stat(file_path)
os.chmod(file_path, file_st.st_mode | stat.S_IEXEC)

with open(os.path.join(script_dir, 'VERSION'), 'w') as f:
f.write(latest_version + '\n')

print('Done. Wrote %s bytes to %s' % (len(data), file_path))</syntaxhighlight>
([userid]は書き直してください)


最後に「pygmentize」を作成し直します。
<syntaxhighlight lang="bash">/home/[userid]/local/python/bin/python3 ./create_pygmentize_bundle</syntaxhighlight>

= WEBブラウザのキャッシュ =
WEBブラウザのキャッシュが残っていると、なかなか変わった感じがしないかもしれません。<br/>
そんな時は例えば「<syntaxhighlight lang="bash">」を「<syntaxhighlight lang="bash" line="line">」などに書き直してみてください。<br/>
これで、行番号が表示されればOKです。

= 参考サイト =
[https://emptypage.jp/notes/pymods-on-sakura.html さくらのレンタルサーバで Python 外部モジュールを使う]<br/>
[https://affitips.com/pages/65.html さくらにPython3をインストールしたときのメモ - アフィリエイト&ウェブ制作のtips]