2

私はPythonを学んでおり、geditプラグインでPythonMarkdownを使用しようとしています。ファイルの整理方法は次のとおりです。

~/.gnome2/gedit/plugins/mytest.gedit-plugin
~/.gnome2/gedit/plugins/mytest/
~/.gnome2/gedit/plugins/mytest/__init__.py
~/.gnome2/gedit/plugins/mytest/markdown/
~/.gnome2/gedit/plugins/mytest/markdown/__init__.py
~/.gnome2/gedit/plugins/mytest/markdown/preprocessors.py
~/.gnome2/gedit/plugins/mytest/markdown/OTHER_FILES
~/.gnome2/gedit/plugins/mytest/markdown/extensions/
~/.gnome2/gedit/plugins/mytest/markdown/extensions/__init__.py
~/.gnome2/gedit/plugins/mytest/markdown/extensions/headerid.py
~/.gnome2/gedit/plugins/mytest/markdown/extensions/OTHER_FILES

説明:

私のファイルmytest.gedit-pluginには、プラグインを宣言するための最小限のコードしか含まれていません。

[Gedit Plugin]
Loader=python
Module=mytest
IAge=2
Name=My test

私のプラグインには独自のサブフォルダー(mytest)があります。ファイルには次のものmytest/__init__.pyが含まれます。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import gedit
import markdown

class MyTestPlugin(gedit.Plugin):
    def __init__(self):
        gedit.Plugin.__init__(self)

    def activate(self, window):
        texte = "# Header 1 {#id}"
        print markdown.markdown(texte, extensions=['headerid'])

最後に、フォルダーmytest/markdownにはデフォルトのPythonMarkdownコードが含まれています。

geditでプラグインをアクティブ化すると([編集]>[設定]>[プラグイン])、ターミナルに出力されます。

Traceback (most recent call last):
  File "/home/moi/.gnome2/gedit/plugins/mytest/__init__.py", line 5, in <module>
    import markdown
  File "/home/moi/.gnome2/gedit/plugins/mytest/markdown/__init__.py", line 161, in <module>
    import preprocessors
  File "/home/moi/.gnome2/gedit/plugins/mytest/markdown/preprocessors.py", line 11, in <module>
    import markdown
ImportError: No module named markdown

** (gedit:8790): WARNING **: Error loading plugin 'My test'

ただし、geditの外部でPythonMarkdownを使用することに成功しました。たとえば、次のファイルは、PythonMarkdownメインフォルダーと同じ場所にあるターミナルで実行するとうまく機能します。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import markdown

texte = "# Header 1 {#id}"
print markdown.markdown(texte, extensions=['headerid'])

import markdownのPythonMarkdownファイルを変更するとimport __init__ as markdown、拡張子(mytest/markdown/extensions/)なしでPython Markdownを使用できることがわかりましたが、とにかく、私の例ではまだ機能しません。

/home/moi/.gnome2/gedit/plugins/mytest/markdown/__init__.py:114: MarkdownWarning: Failed loading extension 'headerid' from 'markdown.extensions.headerid' or 'mdx_headerid'
  warnings.warn(text, MarkdownWarning)
<h1>Header 1 {#id}</h1>

だから、私の質問importは、拡張機能を変更するにはどうすればよいですか、またはローカルの場所にPython Markdownをインストールして($HOMErootアクセスなしで)、geditプラグインでPython Markdownを使用できるようにするにはどうすればよいですか?

どうもありがとう。

注: geditはプラグインの読み込みに使用すると思うPyImport_ImportModuleEx()ので、質問のタイトルにそれを入れました。


編集1: 2の詳細:ルートインストールはなく、PythonMarkdownファイルを変更できます。

編集2:拡張機能は次のコードでロードされますmytest/markdown/__init__.py(約525行目):

# Setup the module names
ext_module = 'markdown.extensions'
module_name_new_style = '.'.join([ext_module, ext_name])
module_name_old_style = '_'.join(['mdx', ext_name])

# Try loading the extention first from one place, then another
try: # New style (markdown.extensons.<extension>)
    module = __import__(module_name_new_style, {}, {}, [ext_module])
except ImportError:
    try: # Old style (mdx.<extension>)
        module = __import__(module_name_old_style)
    except ImportError:
       message(WARN, "Failed loading extension '%s' from '%s' or '%s'"
           % (ext_name, module_name_new_style, module_name_old_style))
       # Return None so we don't try to initiate none-existant extension
       return None

たぶん、相対パスでインポートする方法があります。私は本当にPythonの初心者です。

4

1 に答える 1

2

変更せずに使用する場合markdownは、Pythonライブラリが期待する場所(など)に配置する必要がありますsite-packages/。それ以外の場合は、絶対インポートではなく相対インポートを使用するように変更する必要があります。

于 2011-06-01T22:16:51.667 に答える