1

スタンドアロンスクリプトを作成したのは、いくつかの変更されたモジュールに依存しています。ディレクトリ構造は次のようになります。

client
  setup.py
  tsclient
    __init__.py
    tsup
    utils.py
    mutagen
      __init__.py
      blah.py
      blah.py
      ...
    colorama
      __init__.py
      blah.py
      blah.py
      ...

現在、usupスクリプトを~/binディレクトリにシンボリックリンクするだけで、スクリプトを直接呼び出すことができ、問題なく動作します(すべてが問題なく正しくインポートされます)。

次に、setup.pyスクリプトを作成して、配布できるようにします。どうしたらいいのかわからない。これが私が今持っているものです:

setup(
  name='tsclient',
  version='1.0',
  scripts=['tsclient/tsup'],
  packages=['tsclient', 'tsclient.mutagen', 'tsclient.colorama'],
)

import mutagen問題は、現在はtsupスクリプトであるため、tsupスクリプトで実行できないことtsclient.mutagenです。インポートを変更して、from tsclient import mutagenこのエラーが発生したと言った場合(mutagenの__init__.pyファイルから):

ImportError: No module named mutagen._util

最善の解決策は、変異原を調べて「変異原」のすべてのインスタンスを変更し、それを「tsclient.mutagen」に変更することではないと思います。これが私の唯一の選択肢ですか?

4

1 に答える 1

2

残念ながら、これを機能させるには変異原を編集する必要があります。

幸い、Python 2.5以降には、実行していることを正確にサポートする構文があります。

http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-importsを参照してください。

変異原が現在言っているとしましょう、

from mutagen import _util

あなたが言うようにそれを変更した場合

from . import _util

その後、トップレベルのパッケージとして機能し続けます。必要に応じて、すべてをサブパッケージに移動しても、引き続き機能します。

(ただし、を使用している場合はsetuptools、代わりinstall_requires=にsetup.pyに引数を追加して、パッケージに変異原性物質をインストールする必要があることをsetuptoolsに通知できます。そうすれば、パッケージをimport mutagen直接インストールできます。)

于 2010-07-30T19:34:25.263 に答える