0

手短に言えば、実行時に使用しているモジュールをオーバーライドできるように、現在の実行パスを返すために console_script を取得する必要があります。

これが私の基本的なセットアップです(できる限り要約しました):

    package_1:
      caller_module.py

    console_script_module:
      main.py
      dir_of_modules_to_use/
        a.py
        b.py
        c.py
      setup.py

    setup.py contents:
      setup(
        entry_points = {
          'console_scripts': [
            'console-script-module = console_script_module.main:main'
           ]
         }
        )         

詳細: つまり、caller_module.pyはサブプロセス呼び出しを発行してconsole-script-moduleを呼び出します。次に、dir_of_modules_to_useにあるモジュールが実行されます。別のスクリプトを使用して、これが発生する直前にそれらをオーバーライドすることにより、これらのモジュールの独自のバージョンを提供したいと思います。これを行うには、console-script-moduleがインストールされている場所の実行パスが一貫していないため (virtualenv の変更など)、その実行パスを知る必要があります。

これをmain.pyに追加して、別のコマンドライン引数を使用して呼び出してみました:

    def print_absoulute_dir():    
      print os.path.abspath('dir_of_modules_to_use')

残念ながら、これは、コンソール スクリプトを呼び出した場所のパスのみを返します。



免責事項-これはハッキーでひどいことです。継承したコードからのものであり、短期的に機能するものが必要です。残念ながら、現時点ではcaller_module.py内のコードを変更することはできません。それ以外の場合は、 console_script_module:main.py の呼び出し方法を変更するだけです。

4

1 に答える 1

0

あなたが何を望んでいるかを本当に理解しているかどうかはわかりませんが、すべてのpythonモジュールに__file__ はファイルシステム内の場所を含む属性があり、sys.pathを使用してpythonモジュールの検索パスを変更できます

import urllib
import sys

print urllib.__file__
print sys.path
于 2012-12-04T19:55:30.370 に答える